1:库是什么?
二进制文件
将源代码 -> 二进制格式的源代码
加密
2: 库制作出来之后,如何给用户使用?
头文件
制作出来的库
3:静态库的制作和使用
命名规则:libtest.a
(1):lib
(2):xxx-库的名字
(3).a
制作步骤
(1):原材料:源代码.c .cpp
(2):将源代码生成.o: gcc a.c b.c -c
(3):将.o打包:
ar rcs 静态库的名字 原材料
ar rcs libtest.a a.o b.o
ar - archive
nm libtest.a 查看静态库
库的使用
gcc main.c -I ../include/ -L ../lib/ ltest -o app
-L:指定库的路径
-l:指定库的名字
4:动态库的制作和使用.so
命名规则
libxxx.so
制作步骤
(1):将源文件生成.o
gcc a.c b.c -c -fpic(fPIC)
(2):打包成动态库
gcc -shared a.o b.o -o libxxx.so
库的使用
头文件a.h
动态库libtest.so
参考函数声明编程测试main.c
gcc main.c -I ./include/ -L ./lib -ltest -o app
对于elf格式的可执行程序(file app),ldd app 查看链接的库,是由ld-linux.so*来完成的,它先后搜索elf文件的DT_RPATH路径 - 环境变量LD_LIBRARY_PATH - /etc/ld.so.cache文件列表 - /lib/ ,/usr/lib目录找到库文件后将其载入内存。
链接不上,解决方案:
(1): 复制到/lib 路径
(2):使用环境变量:
I:临时设置
在终端: export LD_LIBRARY_PATH=动态库路径:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=动态库路径
II:永久模式
用户级别:
~/.bashrc
配置完成,重启终端
source ~/.bashrc
系统级别:
/etc/profile
source /etc/profile
III:更新/etc/ld.so.cache文件列表
找到一个配置文件
/etc/ld.so.conf
把动态库的绝对路径添加到文件中
执行命令:sudo ldconfig -v
(3):dlopen,dlclose,dlsym