制作及使用静态库和共享库
2018-03-30 本文已影响14人
温暖春阳
静态库
制作
- 编译为 .o 文件
- 将.o文件 打包: ar rcs libmycalc.a file1.o file2.o file3.o ...
第一步、编译
~/Calc/src$ gcc -c *.c -I ../include/
第二步、打包
~/Calc/src$ ar rsc libCalc.a *.o
第三步、移动
~/Calc/src$ mv libCalc.a ../lib
第四步、编译
~/Calc$ gcc main.c -o app -I include/ -L lib/ -lCalc
第五步、执行
nm libCalc.a查看文件内容
- 将头文件与库一起发布
使用
编译时 需要加静态库名(记得路径),-I 包含头文件
优缺点总结
优点:
- 执行快
- 发布应用时不需要发布库
缺点:
- 执行程序体积会比较大
- 库变更时需要重新编译应用
动态库
制作步骤
- 编译与位置无关的代码,生成.o,关键参数 -fPIC
- 将.o文件打包:关键参数 -shared
- 将库与头文件一起发布
使用
-L 指定动态库路径 -l指定库名
gcc -o newapp main.c -L ./lib -lmycalc -I ./include/
解决不能加载动态库的问题
- 拷贝到 /lib下--- 不允许
cd /lib
cd usr/lib
- 将库路径增加到环境变量 LD_LIBRARY_PATH中,不是特别推荐
将库所在的路径,添加到环境变量中,用冒号分割
- 配置 /etc/ld.so.conf 文件,增加 /home/itcast/backup/cmd/Calc/lib 路径,步骤如下
1. sudo vi /etc/lb.so.conf(配置文件)
2. /home/itcast/backup/cmd/Calc/lib (添加文件绝对路径)
3. sudo ldconfig -v(更新)这只是一次性的
优缺点总结
缺点:
- 执行时需要加载动态库,相对而言,比静态库慢
- 发布应用时需要同时发布动态库
优点:
- 执行程序体积小
- 库变更时,一般不需要重新编译应用