Oracle® Solaris 11.2 链接程序和库指南

退出打印视图

更新时间: 2014 年 7 月
 
 

具有依赖项的共享目标文件

共享目标文件可以有其自己的依赖项。运行时链接程序查找共享目标文件依赖项使用的搜索规则在运行时链接程序搜索的目录中介绍。如果共享目标文件没有位于其中一个缺省搜索目录中,则必须将查找位置明确告知运行时链接程序。对于 32 位目标文件,缺省搜索目录为 /lib/usr/lib。对于 64 位目标文件,缺省搜索目录为 /lib/64/usr/lib/64。指明非缺省搜索路径要求的首选机制是在具有依赖项的目标文件中记录运行路径。使用链接编辑器的 –R 选项可以记录 运行路径。

在以下示例中,共享目标文件 libfoo.so 依赖于 libbar.so;后者在运行时应位于目录 /home/me/lib 中,否则将位于缺省位置中。

$ cc -o libbar.so -G -K pic bar.c
$ cc -o libfoo.so -G -K pic foo.c -R/home/me/lib -L. -lbar
$ elfdump -d libfoo.so | egrep "NEEDED|RUNPATH"
    [1]  NEEDED        0x123         libbar.so.1
    [2]  RUNPATH       0x456         /home/me/lib

共享目标文件负责指定查找其依赖项所需的所有运行路径。所有在动态可执行文件中指定的运行路径只用于查找动态可执行文件的依赖项。不能使用这些运行路径来查找共享目标文件的任何依赖项。

LD_LIBRARY_PATH 系列的环境变量的作用域更具全局性。运行时链接程序使用借助此变量指定的所有路径名来搜索任意共享目标文件依赖项。虽然这些环境变量可用作影响运行时链接程序搜索路径的临时机制,但是强烈建议不要在生产软件中使用这些环境变量。有关更全面的介绍,请参见运行时链接程序搜索的目录