可以从命令行直接运行链接编辑器,也可以让编译器驱动程序调用链接编辑器。以下两小节详细介绍了这两种方法。但是,首选使用编译器驱动程序。编译环境通常是复杂且有时会发生变化的一系列操作(仅对编译器驱动程序可识别)。
直接调用链接编辑器时,必须提供创建预期输出所需的每个目标文件和库。链接编辑器对创建输出时要使用的目标文件模块或库不做任何假设。例如,以下命令将指示链接编辑器仅使用输入文件 test.o 创建名为 a.out 的动态可执行文件。
$ ld test.o
通常,动态可执行文件需要专用的启动代码和退出处理代码。此代码可能特定于语言或操作系统,并且通常通过编译器驱动程序提供的文件提供。
此外,您还可以提供自己的初始化代码和终止代码。必须正确封装和标记此代码,以便运行时链接程序可以正确识别并使用代码。也可以通过编译器驱动程序提供的文件提供此封装和标记。
创建运行时目标文件(如可执行文件和共享目标文件)时,应使用编译器驱动程序来调用链接编辑器。建议仅在使用 -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
注 - 编译器驱动程序包括的实际文件和用于显示链接编辑器调用的机制可能有所不同。
对于 SPARC或 x86目标,链接编辑器是一个跨链接编辑器,可以链接 32 位目标文件或 64 位目标文件。不允许混用 32 位目标文件和 64 位目标文件。同样,只允许单个计算机类型的目标文件。
通常,不需要使用命令行选项来区分链接编辑目标。链接编辑器使用命令行中第一个可重定位目标文件的 ELF 计算机类型来控制操作的模式。专用链接编辑(例如,完全来自 mapfile 或归档库的链接)不受命令行目标文件影响。这些链接编辑缺省为 32 位本机目标。要显式定义链接编辑目标,可使用 -z target选项。