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

退出打印视图

更新时间: 2014 年 7 月
 
 

生成输出文件

在完成输入文件处理和符号解析并且没有出现致命错误后,链接编辑器将生成输出文件。链接编辑器首先生成完成输出文件必需的其他节。这些节包括所有输入文件中的符号表,这些符号表包含局部符号定义以及已解析的全局符号和弱符号信息。

此外,还包括运行时链接程序需要的任何输出重定位和动态信息节。确定所有输出节信息后,将计算输出文件总大小。然后,相应地创建输出文件映像。

创建动态可执行文件或共享目标文件时,通常会生成两个符号表。.dynsym 表及其关联的字符串表 .dynstr 包含寄存器符号、全局符号、弱符号和节符号。这些节成为在运行时作为进程映像一部分映射的 text 段的一部分。请参见 mmapobj(2)。使用此映射,运行时链接程序可以读取这些节,以便执行任何必需的重定位。

.symtab 表及其关联的字符串表 .strtab 包含在输入文件处理过程中收集的所有符号。这些节不能作为进程映像的一部分进行映射。使用链接编辑器的 –z strip-class 选项,或者在链接编辑器之后使用 strip(1),可以将这些节从映像中剥离。

生成符号表期间,将创建保留符号。这些符号对于链接进程有特殊意义。不能在代码中定义这些符号。

_etext

所有只读信息(通常称为文本段)后面的第一个位置。

_edata

初始化的数据后面的第一个位置。

_end

所有数据后面的第一个位置。

_DYNAMIC

.dynamic 信息节的地址。

_END_

_end 相同。此符号具有局部作用域,它与 _START_ 符号一起提供一种确定目标文件地址范围的方法。

_GLOBAL_OFFSET_TABLE_

对链接编辑器提供的地址表(即 .got 节)的引用,与位置无关。此表由与位置无关的数据引用构造而成,这些数据引用出现在使用 –K pic 选项编译的目标文件中。请参见与位置无关的代码

_PROCEDURE_LINKAGE_TABLE_

对链接编辑器提供的地址表(即 .plt 节)的引用,与位置无关。此表由与位置无关的函数引用构造而成,这些数据引用出现在已使用 –K pic 选项编译的目标文件中。请参见与位置无关的代码

_START_

文本段中的第一个位置。此符号具有局部作用域,它与 _END_ 符号一起提供了一种确定目标文件地址范围的方法。

生成可执行文件时,链接编辑器将查找其他符号,以定义可执行文件的入口点。如果使用链接编辑器的 –e 选项指定了一个符号,那么将使用该符号。否则,链接编辑器会查找保留符号名称 _start,然后查找 main