静态库与动态库
学习目的:
掌握静态库与动态库的制作方法
静态库(.a):
在可执行程序运行前就加入到执行代码中。
静态库制作步骤如下:
- 将.c生成.o文件:gcc -c 文件名.c -o 文件名.o
- 使用ar工具库制作静态库:ar rcs lib库名.a 文件名.o
-编译到静态库到可执行文件中:gcc 文件名.c lib库名.a -o a.out
动态库(.so):
在执行程序启动时加入到执行程序中,可以被多个程序共享使用。
动态库制作步骤及使用:
-
将.c生成.o文件(生成与位置无关的代码 -fPIC):gcc -c 文件名.c -o 文件名.o
-
使用gcc -shared 制作动态库:gcc -shared -o lib库名.so 文件名.o
-
编译可执行程序时,指定使用的动态库。-l:指定库名(去掉lib前缀和.so后缀) -L:指定库路径
-
gcc 文件名.c -o a.out -l 库名 -L 库路径
-
运行可执行文件时出错解决办法
-
原因:
- 链接器:工作于链接阶段,工作时需要-l和-L.
- 动态连接器:工作于程序运行阶段,工作时需要提供动态库所在目录位置
-
解决方式
-
通过环境变量 :export LD_LIBRARY_PATH = 动态库路径(临时生效,终端重启时失效)
-
写入终端配置文件,永久生效 .bashrc 使用绝对路径。
-
vi ~/.bashrc
-
写入 export LD_LIBRARY_PATH = 动态库路径 保存
-
. .bashrc/ source.bashrc 重启终端 让修改的.bashrc生效
-
执行程序
-
-
拷贝自定义动态库到/lib (标准C库所在目录)
-
配置文件法
- sudo vi /etc/ld.so.conf
- 写入动态库绝对路径 保存
- sudo ldconfig -v 使配置文件生效
- 执行程序 --使用ldd a.out 查看
-