Linux 静态库编译指南
Linux 上的静态库,其实是目标文件的归档文件。
在 Linux 上创建静态库的步骤如下:
- 写源文件,通过 
gcc -c xxx.c生成目标文件。 - 用 
ar归档目标文件,生成静态库。 - 配合静态库,写一个使用静态库中函数的头文件。
 - 使用静态库时,在源码中包含对应的头文件,链接时记得链接自己的库。
 
源文件
print.c 和 math.c
1  | //print.c  | 
1  | //math.c  | 
生成目标文件
1  | $ gcc -c print.c math.c  | 
归档
使用 ar 归档
1  | $ ar crv libmylib.a my_print.o my_math.o  | 
上述命令中 crv 是 ar 的命令选项:
- c 如果需要生成新的库文件,不要警告
 - r 代替库中现有的文件或者插入新的文件
 - v 输出详细信息
 
通过 ar t libmylib.a 可以查看 libmylib.a 中包含的目标文件。
我们要生成的库的文件名必须形如 libxxx.a ,这样我们在链接这个库时,就可以用 -lxxx。
反过来讲,当我们告诉编译器 -lxxx 时,编译器就会在指定的目录中搜索 libxxx.a 或是 libxxx.so。
头文件
头文件定义了 libmylib.a 的接口,也就是告诉用户怎么使用 libmylib.a。
1  | //my_lib.h  | 
测试
在同一目录下建立 test.c
1  | 
  | 
编译
1  | $ gcc test.c -L. -lmylib -o test # 在。目录搜索 libmylib.a 或 libmylib.so 文件  | 
上面的命令中 -L. 告诉 gcc 搜索链接库时包含当前路径, -lmylib 告诉 gcc 生成可执行程序时要链接 libmylib.a。
运行
1  | $ ./test  | 
自动化编译
利用 make 来进行自动化编译
1  | 
  | 
make build 将会构建 libmylib.a, 
make test 将会生成链接 libmylib.a 的程序,
make clean 将清理所有的编译中间文件和目标文件
附录
例程见 Github
相关博文 Linux 动态库编译指南
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Serendipity!





