链接程序和库指南

共享库处理

共享库是一个或多个输入文件的上一次链接编辑生成的不可分割完整单元。链接编辑器处理共享库时,共享库的所有内容将成为生成的输出文件映像的逻辑部分。包含此逻辑部分意味着,链接编辑过程可以使用在共享库中定义的所有符号项。在执行进程期间实际上会复制共享库。

链接编辑器不使用共享库的程序数据节和大多数链接编辑信息节。绑定共享库以生成可运行的进程时,运行时链接程序将解释这些节。但是,会记录出现的共享库。信息存储在输出文件映像中,以便表明此目标文件是在运行时必须使用的依赖项。

缺省情况下,链接编辑过程中指定的所有共享库在要生成的目标文件中都记录为依赖项。无论要生成的目标文件实际上是否引用共享库提供的符号,都会进行此记录。为了最大程度地降低运行时链接的开销,请仅指定将解析所生成目标文件中的符号引用的那些依赖项。可以使用链接编辑器的调试功能和带有 -u 选项的 ldd(1) 确定未使用的依赖项。或者,链接编辑器的 -z ignore 选项可以抑制记录未使用的共享库的依赖项。

如果某个共享库依赖于其他共享库,则也会处理这些依赖项。处理完所有命令行输入文件后将进行此处理,以完成符号解析过程。不过,在要生成的输出文件映像中,不会将共享库名称作为依赖项进行记录。

虽然命令行中共享库的位置没有归档处理那么重要,但该位置具有全局效果。可重定位库与共享库之间以及多个共享库之间允许存在多个名称相同的符号。 请参见符号解析

链接编辑器处理共享库的顺序由存储在输出文件映像中的依赖性信息维护。运行时链接程序读取此信息,并按相同的顺序装入指定的共享库。因此,链接编辑器和运行时链接程序选择多重定义的一系列符号中第一次出现的某个符号。


注 –

多个符号定义在使用 -m 选项生成的装入映射输出中报告。