静态库制作步骤:
对空间要求低,而时间要求高的核心程序中。
1.将.c生成.o文件
gcc -c add.c -o add.o
2.使用ar工具制作静态库
ar rcs lib库名.a add.o sub.o div.o
如下图所示:
3.编译静态库到可以执行文件中:
gcc test.c lib库名.a -o a.out
动态库制作及使用:
- 将.c生成.o 文件, (生成与位置无关的代码 -fPIC)
gcc -c add.c -o add.o -fPIC
- 使用 gcc -shared 制作动态库
gcc -shared lib库名.so add.o sub.o div.o
- 编译可以执行程序时,指定所使用的的动态库。 -l: 指定库名(去掉lib 前缀和.so后缀) -L:指定库路径。
gcc test.c -o a.out -l mymath -L. /lib
- 运行可以执行程序 ./a.out 出错!!!
原因:
- 连接器:工作于链接阶段,工作时需要 -l和-L
- 动态链接器:工作于程序运行阶段,工作时需要提供动态库所在的目录位置
解决方法:
临时:
1. 通过环境变量:export LD_LIBRARY_PATH=动态库路径
2. ./a.out 成功!!! —— (临时生效,终端重启环境变量失效)
永久:
- 永久生效:写入终端配置文件。——.bashrc 建议使用绝对路径
1. vi ~/.bashrc
2. 写入 export LD_LIBRARY_PATH=动态库路径 保存
3. . .bashrc/ source .bashrc /重启 终端---->让修改后的.bashrc生效
4. ./a.out 成功!!!
2… 拷贝自定义动态库到 /lib(标准C库所在目录位置)
3.配置文件法:
1. sudo vi /etc/ld.so.conf
2. 写入 动态库绝对路径 保存
3. sudo ldconfig -v 使配置文件生效
4. ./a.out 成功!!!——使用ldd a.out查看