1_共享库文件

共享库文件

目录

  • 汇编示例程序 - 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 等