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

退出打印视图

更新时间: 2014 年 7 月
 
 
第 3 章

运行时链接程序

动态可执行文件的初始化和执行过程中,将调用解释程序来完成将应用程序绑定到其依赖项的操作。在 Oracle Solaris OS 中,此解释程序称为运行时链接程序。

在对动态可执行文件进行链接编辑过程中,将会创建一个特殊的 .interp 节以及关联的程序头。此节包含用于指定程序的解释程序的路径名。链接编辑器提供的缺省名称是运行时链接程序的名称:/usr/lib/ld.so.1(对于 32 位可执行文件)和 /usr/lib/64/ld.so.1(对于 64 位可执行文件)。


注 - ld.so.1 是共享目标文件的特例。此处使用的版本号为 1。但是,以后的 Oracle Solaris OS 发行版可能会提供更高的版本号。

在执行动态目标文件的过程中,内核将装入该文件并读取程序头信息。请参见程序头。内核可根据此信息查找所需解释程序的名称。内核会装入并将控制权转交给此解释程序,同时传递足够的信息以便解释程序继续执行应用程序。

除了初始化应用程序以外,运行时链接程序还会提供用来使应用程序扩展其地址空间的服务。此过程涉及装入其他目标文件以及绑定到这些目标文件提供的符号。

运行时链接程序执行以下操作:

  • 分析可执行文件的动态信息节 (.dynamic) 并确定所需的依赖项。

  • 查找并装入这些依赖项,分析其动态信息节以确定是否需要其他依赖项。

  • 执行所有必需的重定位以绑定这些目标文件,为执行进程做好准备。

  • 调用这些依赖项提供的所有初始化函数。

  • 将控制权移交给应用程序。

  • 可在应用程序执行时调用,以执行延迟函数绑定。

  • 可由应用程序调用以使用 dlopen(3C) 获取其他目标文件,并使用 dlsym(3C) 绑定到这些目标文件中的符号。