1、库是什么
功能函数整合成一个库,库包含了编译好的代码和数据,方便使用
程序函数库分为:静态库,动态库,共享库
2、库分类
2.1静态库
程序执行前,就编译加入到目标程序里了
用gcc编译,在gcc后用-l来指定这个库函数
不想让人看到源代码,可以使用静态库
2.2动态库
程序执行时,由目标程序去调用
跟window的.dll相似
3、库的优缺点
静态库
优点:
1.运行快
2.发布程序无需提供静态库,因为已经在程序中(app中),移植方便
缺点:
1.程序大
2.更新,部署,发表麻烦。因为要重新编译生成目标程序
动态库
优点:
1.程序小
2.更新升级简单,因为app中没有库源代码,升级库就可以升级app
缺点:
1.运行慢,加载速度慢
2.发布程序需要提供动态库
4、库的制作
4.1静态库
静态库的格式xxx.a
1.生成xxx.o文件
gcc 文件名 -c
例:gcc ser.c -c
2.生成静态库文件
ar rcs lib库名.a xxx.o
例:ar rcs libser.a ser.o
ar是指令,rcs是指令参数,可以ar --help查看ar的参数说明
4.2动态库
动态库格式xxx.so
1.生成动态库文件
gcc -shared -fpic 文件名 -o lib库名.so
-shared:指定生成动态库
-fpic:fpic选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码。
例:gcc -shared -fpic ser.c -o libser.so
5、库的使用
静态库
gcc 编译的文件 -l库名 库查找路径(默认查找/usr/include)
例:gcc server.c -lser -L ./
动态库
编译和静态库一样,gcc server.c -lser -L ./ -o ser
动态库使用
1.查看系统环境变量命令export
2.通常环境变量一个宏:export LD_LIBRARY_PATH="动态库位置pwd命令出来",
指定该程序运行时候,在LD_LIBRARY_PATH所指定的路径去找库文件
注:临时环境变量,这种方法只能在一个终端窗口使用,换一个窗口就不能使用了
可以写一个脚本:
1.vi shart.sh
2.加一个可执行权限:chmod +x shart.sh
3.直接执行shart.sh
或者直接把库放到
/usr/lib文件夹下,但是不建议这样做