静态库的特点:
编译(链接)时把静态库中相关代码复制到可执行文件中
程序中已包含代码,运行时不需要静态库
程序运行时无需加载库,运行速度快
占用更多磁盘和内存空间
静态库升级后,程序需要重新编译链接
静态库的创建:
1--确定库中函数功能、接口
2--编写库源码
3--编译生成目标文件 gcc -c xxx.c -Wall
4--创建静态库 $ar crs libxxx.a xxx.o
5--查看库中符号信息 $nm libxxx.a
6--编写应用程序test.c
7--编译test.c并链接静态库libxxx.a gcc -o test test.c -L. –lxxx
动态库的特点:
编译(链接)时仅记录用到哪个共享库中的哪个符号,不复制共享库中相关代码
程序不包含库中的代码,尺寸小
多个程序可共享同一个库
程序运行时需要加载库
库升级方便,无需宠幸你编译程序
使用更方便
动态库的创建:
1--确定库中函数的功能、接口
2--编写库源码
3--编译生成目标文件 &gcc -c -fPIC xxx.c yyy.c -Wall
4--创建共享库 $gcc –shared –o libcommon.so.1 xxx.o yyy.o
5--为共享库文件创建链接文件 ln -s libcommon.so.1 libcommom.so
6--符号链接文件命名规则 lib<库名>.so
7--编写应用程序test.c
8--编译test.c并链接共享库libcommon.so $gcc –o test test.c -L. –lcommon
9--添加共享库的加载路径 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
为了让系统能找到要加载的共享库,有三种方法
把库拷贝到/usr/lib 或/lib目录下
LD_LIBRARY_PATH环境变量中添加库所在路径
添加/etc/ld.so.conf.d/*.conf文件,执行ldconfig