静态库
1> 命名规则:lib+库的名字+.a 如libmytest.a
2> 制作步骤:1. 将程序如C语言中的.c文件生成对应的.o文件;2. 将生成的.o文件打包: ar rcs 静态库的名字(libmytest.a) 生成的所有的.o文件
3> 发布和使用静态库:1. 发布静态库 2. 头文件
4> 静态库的有点:1. 因为会把库打包到应用程序中,所以发布程序的时候,不需要提供对应的库;2. 库的加载速度快
5> 静态库的缺点:1. 库被打包到应用程序中,导致库的体积很大;2. 如果库发生了改变,需要重新编译程序。
注意:静态库被打包到应用程序中的时候,不是将整个库都打包进去,而是看测试程序中需要什么.o文件,才打包进去
学习视频:https://www.bilibili.com/video/BV1dt411f7TZ?p=58
共享库(动态库)
1> 命名规则:lib+库的名字+.so
2> 制作步骤:1. 生成与位置无关的代码(生成与位置无关的.o文件);2. 将.o文件打包成共享库(动态库):gcc -shared 共享库的名字 *.o
3> 发布和使用动态库:1. 发布动态库 2. 头文件
在执行测试程序的时候,动态链接器会自动加载程序所依赖的动态库。
4> 解决程序执行的时候动态库无法加载的原因:1. 需要找到动态连接器的配置文件;2. 动态库的路径写入配置文件中;3. 更新------sudo ldconfig -v
5> 动态库的优点:1. 执行程序的包体积小;2. 动态库如果更新(但是接口不变),不需要重新编译程序
6> 动态库的缺点:1. 发布程序的时候,需要把动态库提供给用户;2. 动态库没有被打包到应用程序中,加载速度相对比较慢。