目录 Table of Contents
共享库文件
目录
- 汇编示例程序 - 2
- 共享库文件
- 内存管理功能
如何制作共享库文件
以示例 2 - 数据记录处理为例
我们当时写了 write-record.s, read-record.s 两个汇编文件, 分别完成一个写记录一个读记录的功能.
这两个功能经常被用到, 我们希望把这两个 .o 文件生成一个共享库, 这个文件共享库可以被多个其他文件共享.
ld -shared write-record.o read-record.o -o librecord.so
命令生成共享库文件
共享库的好处, 我们在补充内容里面讲 link 的时候会讲到, 这里先不解释.
如何使用共享库文件
实际上它也是跟其它对象文件做个链接, 链接之后生成目标的可执行文件.
我们拿 write-records.s 这个程序为例.
首先通过汇编器生成 .o 文件 : as write-records.s -o write-records.o
然后我们用 ld
命令, 这个和刚才有点不一样, 首先我们指明 -dynamic-linker
, 也就是指明我要采用动态链接的形式. 动态链接相关的动态链接器的路径在这里. -l
指明目标动态库. 前面有个 -L .
说明在当前目录下找 -lrecord
也就是 librecord.so
ld -L . -dynamic-linker /lib/ld-linux.so.2 -o write-records -lrecord write-records.o
这样我们就通过动态链接的方式生成最终执行文件, 关于动态链接的好处会在后面说明.
运行时的注意事项
动态链接就是你这个 write-record 这个函数的代码, 没有直接连接到你的执行程序里面去, 而是在运行的时候, 去你这个所需的 .so 库里面找.
那么怎么找 .so 呢. 按照在下面的路径当中依次搜寻.
-
为定位共享库文件, dynamic linker 默认在下列目录中依次搜索
- 环境变量 LD_LIBRARY_PATH 保存的路径中查找
- 在文件 /etc/ld.so.conf 中列出的目录中搜索
- 最后到默认的系统库文件目录中查找 : 先是 /usr/lib, 然后是 /lib 等