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

退出打印视图

更新时间: 2014 年 7 月
 
 

归档处理

使用 ar(1) 生成归档。归档通常由一组可重定位目标文件和一个归档符号表组成。该符号表提供符号定义与提供这些定义的目标文件之间的关联。缺省情况下,链接编辑器有选择地提取归档成员。链接编辑器使用未解析的符号引用从归档中选择完成绑定过程所需的目标文件。也可以显式提取归档的所有成员。

在以下情况下,链接编辑器从归档中提取可重定位目标文件。

  • 归档成员包含满足符号引用的符号定义,这些符号定义目前保存在链接编辑器的内部符号表中。此引用有时称为未定义符号。

  • 归档成员包含满足暂定 (tentative) 符号定义(目前保存在链接编辑器的内部符号表中)的数据符号定义。例如,FORTRAN COMMON 块定义,它将导致提取定义了相同 DATA 符号的可重定位目标文件。

  • 归档成员包含的某个符号定义与需要隐藏可见性或受保护可见性的一个引用相匹配。请参见Table 12–23

  • 链接编辑器 –z allextract 有效。此选项会暂停选择性归档提取,并导致从正在处理的归档中提取所有归档成员。

有选择地提取归档时,除非 –z weakextract 选项有效,否则弱符号引用不会从归档中提取目标文件。有关更多信息,请参见简单解析


注 -  使用选项 –z weakextract–z allextract–z defaultextract 可以在多个归档之间切换归档提取机制。

在有选择地提取归档的情况下,链接编辑器会对整个归档进行多遍检查。将根据需要提取可重定位目标文件,以满足链接编辑器内部符号表中累积的符号信息。链接编辑器检查完归档一遍(但未提取任何可重定位目标文件)之后,将处理下一个输入文件。

由于遇到归档时仅从归档中提取需要的可重定位目标文件,因此命令行中归档的位置可能很重要。请参见命令行中归档的位置


注 -  虽然链接编辑器会通过对整个归档进行多遍检查来解析符号,但这种机制的开销会很大。对于包含随机组织的可重定位目标文件的大型归档,更是如此。在这些情况下,应使用 lorder(1)tsort(1) 之类的工具对归档文件中的可重定位目标文件进行排序。该排序操作可减少链接编辑器必须检查归档的遍数。