1. 介绍库文件
- 库文件是计算机上的一类文件,可以简单的把库文件看成一种代码仓库,它提供给使用者一些可以直接拿来用的变量、函数或类。
- 库是特殊的一种程序,编写库的程序和编写一般的程序区别不大,只是库不能单独运行。
- 库文件有两种,静态库和动态库(共享库),区别是:静态库在程序的链接阶段被复制到程序中;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。
- 库的好处:1.代码保密;2.方便部署和分发
2. 制作静态库
2.1 静态库命名规则:
-
Linux 下 :libxxx.a
lib : 固定前缀
xxx : 库名称
.a :固定后缀 -
Windows 下 :libxxx.lib
2.2 静态库的制作:
-
先将想要打包成静态库的函数或者类文件(.c 或 .cpp)通过 gcc -c 编译为 .o 文件
-
再使用 linux 系统自带的 ar 工具(archive)将 .o 文件打包为 libxxx.a 文件
ar rcs libcalc.a add.o div.o sub.o mult.o
r - 将文件插入备存文件中
c - 建立备存文件
s - 索引
3. 使用静态库
3.1 工程目录如下图所示,计划将 main.c 编译成可执行文件,main.c 需调用到 head.h 头文件,并通过 head.h 头文件访问到 libcalc.a 静态库内封装好的函数。
/*main.c*/
#include <stdio.h>
#include "head.h"
int main()
{
int a = 20;
int b = 12;
printf("a = %d, b = %d\n", a, b);
printf("a + b = %d\n", add(a, b));
printf("a - b = %d\n", subtract(a, b));
printf("a * b = %d\n", multiply(a, b));
printf("a / b = %f\n", divide(a, b));
return 0;
}
/*head.h*/
#ifndef _HEAD_H
#define _HEAD_H
// 加法
int add(int a, int b);
// 减法
int subtract(int a, int b);
// 乘法
int multiply(int a, int b);
// 除法
double divide(int a, int b);
#endif
3.2 使用如下命令进行编译操作:
gcc main.c -o app -I ./include/ -l calc -L ./lib
-o 将 main.c 程序直接编译成 app 可执行文件
-I 指定 include 包含文件的搜索目录,后面的路径是 main.c 程序需要索引到的 head.h 文件路径
-l 在程序编译的时候,指定使用的库( calc 是 libcalc.a 的名称)
-L 指定编译的时候,搜索的库的路径