1 linux库分为静态库和动态库
1.1静态库
静态库函数库是在程序执行前(编译)就加入到目标程序中去的。
优点:1,运行快 2 发布程序无需提供静态库,因为编译时已经添加,移植方便。
缺点:1.内存大 2 更新,部署,发布麻烦。
1 . 2动态库
动态函数库,是在程序执行时动态由目标程序去条用。
优点:1 链接是不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序可以共用,节省内存。 2 程序升级简单,因为APP里面没有库的源代码,升级之后只要库的名字不变,函数名以及参数不变,只是实现了优化,就能加载成功。
缺点:1 加载速度比静态库慢 2 发布程序需要提供依赖的动态库。
2.库的制作
2.1静态库的制作(格式****.a)
第一步:gcc calcufuncs.c -c .o (生成.o文件)
第二步:ar rcs libcalcufunc.a calcufuncs.o (*.o文件生成.a静态文件库)
2.2动态库的制作
gcc -shareh -fpic .c -o lib.so
(-shared指定生成动态库 -fpic标准)
3.库的使用
3.1 静态库
生成可执行文件 gcc ***.c -lcalcufunc -L ./ -o mainProStatic
(-lcanlcufunc -l是指定要用的静态库,库名砍头去尾 。-L 告诉gcc编译器从-L指定的路径去找静态库)
直接 ./mainProStatic 便可执行
3.2动态库
生成可执行文件 gcc calculatorT.c -lcalc -L ./ -o mainProDy (但不能直接./mainProDy 去执行,而要指定动态库的位置)
带动态库的程序,
可以指定该程序运行时候,在LD_LIBRARY_PATH 所指定的路径去找库文件
先执行export LD_LIBRARY_PATH="/home/pi/back/test"(你要用的动态库所在路径)临时指定库
再执行 ./mainProDy
当以上分步执行只能在当前窗口有用,因为export LD_LIBRARY_PATH="/home/pi/back/test"是临时的。去别的窗口执行./mainProDy,也要先export。
通常我们会写一个shell脚本
export LD_LIBRARY_PATH="/home/pi/back/test"
./mainProDy
把这两句话写进一个文件内保存退出,并用chmod +x (文件名) 命令给这个脚本可执行的权限,然后执行这个脚本。