静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被链接到目标代码中,而是在程序运行时才被载入,因此程序运行时还需要动态库的存在。
静态库制作及使用
命名规则 libxxx.a
(1)制作步骤
- 原材料:源代码 .c .cpp
- 将源代码.c文件生成.o文件
gcc a.c b.c -c
- 将.o文件打包
ar rcs libtest.a a.o b.o
ar就是archive
(2)库的使用
- gcc test.c -I ../include -L./lib -l mycalc -o
-I指定头文件路径 -L指定静态库的目录 -l指定静态库的名字
动态库的制作和使用
命名规则libxxx.so
(1)制作步骤
- 将源代码.c文件生成.o文件
gcc a.c b.c -c -fpic(fPIC) //fpi用来生成位置无关代码
2.将.o文件打包成动态库
gcc -shared -o libxx.so a.o b.o
(2)库的使用
头文件a.h 动态库libtest.so
gcc main.c -I./ -L./ -l test -o app
对于动态库需要在程序运行时加载,需要将动态库路径添加到环境变量中,否则编译时会提醒找不到库的路径
(3)动态库无法加载
- 使用环境变量
- 临时设置:
在终端:
Export LD_LIBRARY_PATH=动态库的路径
- 永久设置:
用户级别:
~/.bashrc //这是一个隐藏文件
配置完成以后需要重启终端或者source一下 source ~./bashrc
系统级别:
/etc/profile
source /etc/profile
2./etc/ld.so.conf文件列表
找到一个配置文件 /etc/ld.so.conf,然后把动态库的绝对路径添加到文件中
执行一个命令:sudo ldconfig -V
知识点拓展: dlopen dlclose dlsym