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

退出打印视图

更新时间: 2014 年 7 月
 
 

符号查找

当运行时链接程序需要查找符号时,缺省情况下它会搜索每个目标文件进行查找。运行时链接程序首先搜索动态可执行文件,然后按照共享目标文件的装入顺序搜索每个共享目标文件。在多数情况下,需要符号重定位的共享目标文件最终都是符号定义的提供者。

在这种情况下,如果不需要此重定位所用的符号成为共享目标文件接口的一部分,则首选将此符号转换为静态自动变量。还可以应用符号缩减以从共享目标文件接口中删除符号。有关更多详细信息,请参见缩减符号作用域。通过进行上述转换,链接编辑器在创建共享目标文件过程中,会产生针对这些符号处理符号重定位的开销。

应在共享目标文件中可见的全局数据项只是那些属于此共享目标文件用户接口的数据项。以前,这是要实现的硬性目标,因为通常将全局数据定义为允许从两个或多个位于不同源文件中的函数进行引用。通过应用符号缩减,可以删除不必要的全局符号。请参见缩减符号作用域。减少从共享目标文件导出的全局符号数会降低重定位成本,并全面改善性能。

在具有许多符号重定位和依赖项的动态进程中,使用直接绑定也可以显著降低符号查找开销。请参见Chapter 6, 直接绑定