库文件的生成与使用
1. 什么是库文件
库是一组预先编译好的函数方法的集合
Linux上库文件的存放位置:/lib和/usr/lib
库分为两种:静态库和共享库
Linux上静态库标识(libxxx.a) ,共享库(libxxx.so)
Windows上静态库标识(.lib),共享库(.dll)
2.静态库的生成和使用
2.1静态库的生成
这里有生成静态库的文件,其中add.c,max.c存放函数的实现,其中fun.h存放函数的声明
第一步:将一会静态库需要的“.c”文件进行编译,生成“.o”文件:

第二步:通过命令ar,将这里需要的“.o”文件生成静态库:
- c 创建一个库文件
- v 显示命令执行过程
- r 向库文件中添加方法(.a)
- t 查看静态库中间由哪些“.o”组成

2.2 静态库的使用
这里有一个测试文件“main.c”,其中具体代码为:
以下是使用静态库“libfun.a”和“main.c”生成可执行文件的过程,其中:
- -L:库所在路径
- -l:库的名称(注意:开头的lib和后缀.a不要写

3.共享库的生成和使用
3.1共享库如何生成
这里有生成静态库的文件,其中add.c,max.c存放函数的实现,其中fun.h存放函数的声明
第一步:将一会静态库需要的“.c”文件进行编译,生成“.o”文件:
第二步:通过gcc命令将第一步生成所有“.o”文件,生成共享库:
- -shared 命令gcc 生成共享库
- -fPIC 说明共享库使用相对地址

这时,有两个可执行文件main, a.out,现在运行一下, 突然发现,系统报错,说是用到的共享库,找不到:
原因,是因为编译器跑的时候,会去/usr/lib里面找这个共享库,找不到就会报错,那么只需要将使用到的共享库放/usr/lib里面即可:
假设,当前路径下有同名的静态库和动态库,那么这个时候,可执行文件用的是静态库还是动态库?
结论:如果存在同名,默认链接的是动态库
4.静态库和共享库的区别
静态库在链接时将用到的方法包含到最终生成的可执行程序中,而共享库不包含,只做
标记,在运行程序时,才动态加载。
**共享库的优势:**因为链接共享库的可执行文件,在执行的时候才会去看共享库,所以如果修改代码,只
需要修改共享库即可,可执行文件不需要修改。
**静态库的优势:**比动态库执行速度快,静态库生成的可执行文件不再需要原先的静态库
总结:
- 静态库是在链接阶段时将使用的方法包含到最终的可执行文件中
- 共享库不包含,只会做标记(说明运行时需要的共享库在哪,但是共享库本体是不包含的),然后在运行阶段,才会去动态链接
版权声明:本文为qq_42795061原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。