链接程序和库指南

运行时链接程序搜索的目录

运行时链接程序在两个缺省位置中查找依赖项。在处理 32 位目标文件时,缺省位置为 /lib/usr/lib。在处理 64 位目标文件时,缺省位置为 /lib/64/usr/lib/64。必须显式地将要搜索的所有其他目录添加到运行时链接程序的搜索路径中。

当动态可执行文件或共享库与其他共享库链接时,这些共享库将作为依赖性进行记录。运行时链接程序执行进程期间必须找到这些依赖性。链接动态库时,可以在输出文件中记录一个或多个搜索路径。这些搜索路径称为运行路径。运行时链接程序使用目标文件的运行路径来查找该目标文件的依赖性。

可以使用 -z nodefaultlib 选项生成专用目标文件,以便在运行时不搜索任何缺省位置。该选项的用法表示使用目标文件的运行路径可以查找该目标文件的所有依赖性。如果不使用此选项,则无论如何扩充运行时链接程序的搜索路径,该搜索路径中的最后一个元素始终是缺省位置。


注 –

可以使用运行时配置文件管理缺省搜索路径。 请参见配置缺省搜索路径。但是,目标文件的创建者不应依赖于此文件的存在。应始终确保目标文件仅使用其运行路径或缺省位置即可找到它的依赖性。


可以使用 -R 选项(采用冒号分隔的目录列表形式)将运行路径记录在动态可执行文件或共享库中。以下示例将运行路径 /home/me/lib:/home/you/lib 记录在动态可执行文件 prog 中。


$ cc -o prog main.c -R/home/me/lib:/home/you/lib -Lpath1 \

-Lpath2 file1.c file2.c -lfoo -lbar

运行时链接程序使用这些路径(后接缺省位置)来获取任何共享库的依赖性。在本示例中,此运行路径用于查找 libfoo.so.1libbar.so.1

链接编辑器接受多个 -R 选项。指定的多个选项串联在一起,用冒号分隔。因此,上一个示例还可以按如下所示表示。


$ cc -o prog main.c -R/home/me/lib -Lpath1 -R/home/you/lib \

-Lpath2 file1.c file2.c -lfoo -lbar

对于可以安装在各种位置的目标文件,$ORIGIN 动态字符串标记提供了一种记录运行路径的灵活方法。 请参见查找关联的依赖项


注 –

以前指定 -R 选项的替代方法是设置环境变量 LD_RUN_PATH,并使链接编辑器可以使用此环境变量。LD_RUN_PATH-R 的作用域和功能完全相同,但如果同时指定了这两者,则 -R 会取代 LD_RUN_PATH