链接程序和库指南

删除未使用的材料

包含要生成的目标文件未使用的函数和数据是一种浪费。此类材料使得目标文件变得过大,从而导致不必要的重定位开销以及关联的换页活动。对未使用的依赖项的引用也是一种浪费。这些引用会导致不必要地装入和处理其他共享库。

使用链接编辑器调试标记 -D unused 时,会在链接编辑过程中显示未使用的节。应该从链接编辑中删除标识为未使用的节。可以使用链接编辑器 -z ignore 选项删除未使用的节。

在以下情况下,链接编辑器会将可重定位目标文件中的节标识为未使用:

通过定义共享库的外部接口可以改进链接编辑器删除节的功能。通过定义接口,可以将未定义为此接口一部分的全局符号降级为局部符号。现在,可以将未从其他目标文件引用的降级后符号明确标识为删除目标文件。

如果将单个函数和数据变量指定给其自己的节,则使用链接编辑器可以删除这些项。可以使用诸如 -xF 的编译器选项完善此节。较早的编译器仅可用于将函数指定给其自己的节。较新的编译器已扩展了 -xF 语法,可以将数据变量指定给其自己的节。较早的编译器要求在使用 -xF 时禁用 C++ 异常处理。较新的编译器中已删除了此限制。

如果可以删除可重定位目标文件中的所有可分配节,则在链接编辑时会放弃整个文件。

除了删除输入文件之外,链接编辑器还可标识未使用的依赖项。如果要生成的目标文件未绑定某个依赖项,则会将此依赖项视为未使用。可以使用 -z ignore 选项生成目标文件,以避免记录未使用的依赖项。

-z ignore 选项仅应用于链接编辑命令行中该选项后的文件。可以使用 -z record 取消 -z ignore 选项。