- 项目代码更加简洁,没有过多的源文件需要管理
- 保护项目代码,以库的方式提供给使用者,使用者无法知道源代码
- 对源文件编译得到.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 - 系统级别
- export LD_LIBRARY_PATH
- 给动态库设置软连接 /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
- vi /etc/ld.so.conf
| 静态库 | 动态库 | |
|---|---|---|
| 优点 | 静态库打包到程序中,加载快;发布程序无需提供库文件,移植方便 | 多个进程共享库文件;方便升级 |
| 缺点 | 库文件会被加载多次,占用资源;更新库文件需要重新编译 | 加载较慢;发布程序需要库文件的支持 |
b站视频



