链接程序和库指南

命令行中归档的位置

命令行中归档的位置可以影响要生成的输出文件。链接编辑器搜索归档只是为了解析先前遇到的未定义或暂定外部引用。完成此搜索并提取所有需要的成员后,链接编辑器将继续处理命令行中的下一个输入文件。

因此,缺省情况下,不能使用归档解析命令行中归档后面的输入文件中的任何新引用。例如,以下命令指示链接编辑器搜索 libfoo.a,仅仅是为了解析从 file1.c 中获取的符号引用。不能使用 libfoo.a 归档解析 file2.cfile3.c 中的符号引用。


$ cc -o prog file1.c -Bstatic -lfoo file2.c file3.c -Bdynamic

注 –

应该在命令行末尾指定任何归档,除非多重定义冲突要求采取其他方式。


归档之间可以存在相互的依赖性,这样,要从一个归档中提取成员,还必须从另一个归档中提取相应成员。如果这些依赖性构成循环,则必须在命令行中重复指定归档以满足前面的引用。 例如:


$ cc -o prog .... -lA -lB -lC -lA -lB -lC -lA

确定和维护重复指定的归档是一个繁琐的任务。使用 -z rescan 选项可以简化此过程。处理完所有输入文件后,此选项将导致重新处理整个归档列表。此处理过程尝试查到解析符号引用的其他归档成员。继续重新扫描此归档,直到扫描归档列表一遍但未提取任何新成员为止。因此,上一个示例可以简化为:


$ cc -o prog -z rescan .... -lA -lB -lC