静态库的制作及使用
- 静态库制作步骤
1. 生成制作静态库用的目标文件。
gcc -c xxx.c -o xxx.o
2. 使用ar工具 rcs 参数,制作静态库。
命名方式:libxxx.a 。 ar rcs libmymath.a xxx.o xxx.o
3. 编写 静态库对应的头文件,包含 函数原型。添加“头文件守卫”
- 静态库的使用
方法一:
- 将 静态库 与 测试文件一同编译生成 可执行文件。
- gcc test.c libmymath.a -o a.out
方法二:
- 使用 -I(大i) 指定 头文件路径。使用 -L 指定 库存储路径。 使用 -l(小L) 指定 库名(去除lib前缀,.a 后缀)。
- gcc test.c -o test -I ./inc -l mymath -L ./lib
动态库的制作及使用
- 动态库的制作步骤
1. 生成目标文件(与地址无关 -fPIC)
gcc -c xxx.c -o xxx.o -fPIC
2. 制作动态库
gcc -shared -o libmymath.so xxx.o xxx.o xxx.o
- 使用动态库
一、错误示范:
1. -I、-L、-l 依次指定 头文件位置、库路径、库名 编译生成可执行文件。
gcc test.c -o test -I ./inc -L./lib -lmymath
2. ./test 运行可执行文件。 报错!!!!
二、**介绍连接器 和 动态连接器概念:**
- 连接器:
- 工作于 可执行文件生成之前的 编译后的连接阶段。 -L 和 -l 给连接器使用
- 动态连接器:
- 工作于可执行文件加载到内存开始运行之后。
三、解决动态连接器找不到动态库4种方法
温馨提示:ldd 命令可以查看可执行文件,运行所依赖的 动态库。
1.环境变量法:
- export LD_LIBRARY_PATH=./lib
- - 一旦终端关闭,无效。
2.将环境变量写入文件:
- export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./lib 添加到 ~/.bashrc 文件中,每次bash启动都会生效。
注意使 .bashrc 在终端中生效的三种方法:
1)终端输入 source .bashrc
2)终端输入 . .bashrc
3)重启终端
3.放置于系统库路径:
将自定义动态库放置于 标准库的存储目录位置。/lib/x86_64-linux-gnu。 动态连接器自动搜索该目录。
4.配置文件:
- 最终目的是 修改 /etc/ld.so.cache (该文件是二进制,不能直接编辑)采用2步达到这一目的。
1)将动态库的绝对路径 存放到 /etc/ld.so.conf 文件中。
2)使用 sudo ldconfig -v 命令 刷新 /etc/ld.so.cache 文件(包含自定义动态库)。
温馨提示:解决动态连接器找不到动态库的方法建议使用2和4方法。