静态库的制作:
1.命名规则:
lib+库名+.a eg:libmyku.a
2.制作步骤
- 生成 .o文件 gcc -c *.c
- 将生成的.o 文件打包 ar rcs +库名(libmyku.a)+所需的.o文件
eg: 1: gcc -c *.c 2: ar rcs libmytest.a *.o
本质:提供一个静态库和一个头文件 该头文件包含有所库中的函数接口,该库中包含所有的函数实现(以库的形式提供,从而不提供原码)
include :提供的头文件 lib: 为需提供的静态库 mian.c:为提供的测试库的测试程序
src:为源代码 ,一般不用提供
3.库的使用
法一:gcc main.c lib/libmyku.a -o main
法二: gcc main.c -L lib -l myku -o main 解释-L:库的路径 -l : 库名 需要插头(lib)去尾 (.a)
4.静态库的优缺点
优点: - 当使用过该静态库源程序编译时,会打包静态库到在源程序中,所以程序发布时不需要提供静态库
- 其加载库的速度快
缺点: - 导致程序体量太大
- 如果库发生改变,需要重新编译源程序
动态库(共享库)的制作:
1.命名规则:
lib+库名+. so eg:libmyku.so
2.制作步骤
- 生成与位置无关的.o文件 gcc -fPIC -c *.c
- 打包所有的.o文件 gcc -shared -o libmyku.so *.o
动态库是在程序运行时加载到虚拟内存中的共享库区
动态链接库由于是在程序运行是才加载的,所以必须用到一个动态链接器辅助加载
ldd app(可执行程序)可以查看可执行程序的所使用的动态链接库有那些
3.库的使用 - 1.放到系统的库文件中,不推荐使用,万一与系统库文件重名
- 2.export LD_LIBRARY_PATH=动态库的绝对路径 终端关闭,环境变量就失效,仅仅临时测试
- 3.在家目录下的.bashrc文件下添加export LD_LIBRARY_PATH=动态库的绝对路径,需重启终端
- 4.推荐使用 在/etc/ld.so.conf中添加export LD_LIBRARY_PATH=动态库的绝对路径,在更新sudo ldconfig -v 即可永久生效
执行后上述操作中任意一种后
法一:gcc main.c lib/libmyku.a -o main
法二: gcc main.c -L lib -l myku -o main 解释-L:库的路径 -l : 库名 需要插头(lib)去尾 (.a)
4.动态库的优缺点
优点: - 执行程序体量小
- 动态库变化时,只有接口不变,不需要重新编译源程序
缺点: - 发布程序时需要将动态库提供用户
- 动态库没有打包到程序中,加载速度相比静态库慢