制作及使用静态库和共享库

2018-03-30  本文已影响14人  温暖春阳

静态库

制作

  1. 编译为 .o 文件
  2. 将.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查看文件内容
  1. 将头文件与库一起发布

使用

编译时 需要加静态库名(记得路径),-I 包含头文件

优缺点总结

优点:

  1. 执行快
  2. 发布应用时不需要发布库

缺点:

  1. 执行程序体积会比较大
  2. 库变更时需要重新编译应用

动态库

制作步骤

  1. 编译与位置无关的代码,生成.o,关键参数 -fPIC
  2. 将.o文件打包:关键参数 -shared
  3. 将库与头文件一起发布

使用

-L 指定动态库路径 -l指定库名

gcc -o newapp main.c -L ./lib -lmycalc -I ./include/

解决不能加载动态库的问题

  1. 拷贝到 /lib下--- 不允许
cd /lib
cd usr/lib
  1. 将库路径增加到环境变量 LD_LIBRARY_PATH中,不是特别推荐
将库所在的路径,添加到环境变量中,用冒号分割
  1. 配置 /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(更新)这只是一次性的

优缺点总结

缺点:

  1. 执行时需要加载动态库,相对而言,比静态库慢
  2. 发布应用时需要同时发布动态库

优点:

  1. 执行程序体积小
  2. 库变更时,一般不需要重新编译应用
上一篇下一篇

猜你喜欢

热点阅读