使用库文件的优点
- 项目代码更加简洁,没有过多的源文件需要管理
- 保护项目代码,以库的方式提供给使用者,使用者无法知道源代码
静态库
静态库的制作
- 对源文件编译得到
.o文件(加参数 -c) ar进行打包,生成.a静态库文件
gcc *.c(源文件) -c
ar rcs libxxx.a *.o
- c 创建一个库--创建
- s 创建目标文件索引--编号索引
- r 库中插入模块
静态库的使用
gcc main.c -o app -L 库的路径(绝对或者相对都OK) -l库的名字(去头lib,去尾.a)
动态库
动态库的制作
- 编译生成
.o文件,必须加参数-fpic gcc 生成对应库,加参数-shared
gcc 源文件(*.c) -c -fpic
gcc -shared *.o -o libxxx.so
动态库的使用和静态库保持一致
找不见库.so的问题
第一种
- 使用环境变量
LD_LIBRARY_PATH - 动态库的绝对路径添加到该环境变量中
-LD_LIBRARY_PATH= /usr/lib/xxxx
export LD_LIBRARY_PATH
- 直接在shell中设置–临时当前终端生效
- 写入配置文件
~/.bashrc - 用户级别/etc/prefile - 系统级别
第二种
- 给动态库设置软连接
/usr/xxx - 将软连接放到
/usr/lib /usr/lib64 /lib /lib64 sudo ln -s /usr/xxx/xxx.so /usr/lib
第三种
- 刷新
/etc/ld.so.cache
vi /etc/ld.so.conf
sudo ldconfig -v
各自优缺点
| 静态库 | 动态库 |
|---|
| 优点 | 静态库打包到程序中,加载快;发布程序无需提供库文件,移植方便 | 多个进程共享库文件;方便升级 |
| 缺点 | 库文件会被加载多次,占用资源;更新库文件需要重新编译 | 加载较慢;发布程序需要库文件的支持 |


参考视频
b站视频