静态库: 编译时就加入库文件,运行快,但是更新版本操作较麻烦
动态库: 程序运行时动态加载的库文件,供给调用程序使用,只调用一次,多个程序可使用,节省内存,因为APP里面没有库文件源码,升级时只要库的名字不变,函数名和参数不变,只是实现做了优化,就可以再次调用(动态函数库,共享函数库是一个东西,在Linux上叫共享对象库,文件后缀是.so Windows上叫动态加载函数库,文件后缀是.dll)
静态库的制作:
gcc filename.c -c 生成.o文件
ar rcs libfilename.a filename.o 生成.a文件
静态库的使用:
只需向用户提供filename.a 和filename.h
用户编译: gcc main.c -lfilename -L ./
编译链库时要砍头(lib)去尾(.a)
-L是去当前路径查找
动态库的制作:
生成.so文件:
gcc -shared -fpic filename.c -o libfilename.so
-shared 指定生成动态库
-fpic 用作编译阶段,在生成目标文件时使用该项生成位置无关代码
用户使用:
gcc main.c -lfilename -L ./
编译后无法运行:
提示找不到.so文件,需要把编译的动态库放到Linux的 /usr/lib
sudo cp libfilename.so /usr/lib
再次运行
也可以设置指定动态库的位置:
比如配置临时环境变量,只针对当前路径
export LD_LIBRARY_PATH="/home/pi/也就是你的文件路径"
也可以通过shell脚本命令,把环境变量和./main放进去,给脚本增加可执行权限:
vi start.sh
写入:
export LD_LIBRARY_PATH="/home/pi/也就是你的文件路径"
./main
保存
增加权限:chmod +x start.sh
最后运行./start.sh
查看文件大小:
du main