函数库: 具有特定功能的函数,系统或者第三方提供的编译好的二进制文件(如数学库、线程库等),分为静态库和动态库。
静态库:代码运行时候,将静态库代码复制进文件(用到哪些复制哪些),移植性好,但是代码体积大,升级库后需要重新编译源文件
生成静态库的步骤:
1)写库文件源码 即和之前头文件实现的.c文件类似(通常函数库也有头文件)
2)把源码编译为目标文件(*.o) gcc -c xxxx.c xxx.c
3) 用ar命令把目标文件生成lib文件 ar crs libxxx.a xxx.o xxx.o ...
4)写调库函数的主程序。
5)把生成的lib文件和主程序一起编译链接
gcc -o 目标文件名 -L库路径 -lxxx
gcc -o 目标文件名 -static -L库路径 -lxxx
动态库:不复制代码到源代码,在程序运行时候同事加载库至内存,动态库可以被多个程序调用,动态库升级方便,但程序运行依赖库的加载
生成动态库的步骤:
1)写库文件源码,同上
2)把源码编译为目标文件(*.o) gcc -c -fPIC xxxx.c xxx.c (路径无关文件)
3)生成动态链接库文件 gcc -shared -o libxxx.so xxx.o
4)写调库函数的主程序。
5)把生成的lib文件和主程序一起编译链接
gcc -o 目标文件名 -L库路径 -lxxx
6) 生成的库文件执行文件在执行的时候找不到库文件,
下面三种方法可选,
1 把动态库添加到系统的库文件目录中 //需要权限,不建议使用
2 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:你的动态库路径 //推荐
3 添加/etc/ld.so.conf.d/*.conf文件,执行ldconfig刷新 //需要权限,不建议使用