链接程序和库指南

调用链接编辑器

可以从命令行直接运行链接编辑器,也可以让编译器驱动程序调用链接编辑器。以下两小节详细介绍了这两种方法。但是,首选使用编译器驱动程序。编译环境通常是复杂且有时会发生变化的一系列操作(仅对编译器驱动程序可识别)。

直接调用

直接调用链接编辑器时,必须提供创建预期输出所需的每个目标文件和库。链接编辑器对创建输出时使用的目标文件模块或库不会作出任何假设。例如,当您发布以下命令时:


$ ld test.o

链接编辑器仅使用输入文件 test.o 创建一个名为 a.out 的动态可执行文件。要使 a.out 成为有用的可执行文件,应该包括用于启动和退出处理的代码。此代码可以特定于语言或操作系统,并且通常通过编译器驱动程序提供的文件提供。

此外,您还可以提供自己的初始化代码和终止代码。必须正确封装和标记此代码,以便运行时链接程序可以正确识别并使用代码。也可以通过编译器驱动程序提供的文件提供此封装和标记。

创建运行时目标文件(如可执行文件和共享库)时,应使用编译器驱动程序来调用链接编辑器。建议仅在使用 -r 选项创建中间可重定位目标文件时直接调用链接编辑器。

使用编译器驱动程序

通常通过特定于语言的编译器驱动程序来使用链接编辑器。需要为编译器驱动程序 cc(1) 和 CC(1) 等等提供组成应用程序的输入文件。编译器驱动程序将添加其他文件和缺省库以完成链接编辑。展开编译调用可以看到这些其他文件,例如:


$ cc -# -o prog main.o

/usr/ccs/bin/ld -dy /opt/COMPILER/crti.o /opt/COMPILER/crt1.o \

/usr/ccs/lib/values-Xt.o -o prog main.o \

-YP,/opt/COMPILER/lib:/usr/ccs/lib:/usr/lib -Qy -lc \

/opt/COMPILER/crtn.o

注 –

编译器驱动程序包括的实际文件和用于显示链接编辑器调用的机制可能有所不同。