JavaScript is required to for searching.
跳过导航链接
退出打印视图
链接程序和库指南     Oracle Solaris 10 8/11 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  Oracle Solaris 链接编辑器介绍

2.  链接编辑器

调用链接编辑器

直接调用

使用编译器驱动程序

32 位链接编辑器和 64 位链接编辑器

跨链接编辑

指定链接编辑器选项

输入文件处理

归档处理

共享目标文件处理

与其他库链接

库命名约定

同时链接共享目标文件和归档

命令行中归档的位置

链接编辑器搜索的目录

使用命令行选项

使用环境变量

运行时链接程序搜索的目录

初始化节和终止节

符号处理

符号解析

简单解析

复杂解析

致命解析

未定义符号

生成可执行输出文件

生成共享目标文件输出文件

弱符号

输出文件中的暂定符号顺序

定义其他符号

使用 -u 选项定义其他符号

定义符号引用

定义绝对符号

定义暂定 (tentative) 符号

扩充符号定义

缩减符号作用域

删除符号

外部绑定

字符串表压缩

生成输出文件

标识功能要求

标识平台功能

标识计算机功能

标识硬件功能

标识软件功能

软件功能帧指针处理

创建符号功能函数系列

创建符号功能数据项系列

将目标文件功能转换为符号功能

功能系列试验

重定位处理

位移重定位

桩目标文件

调试帮助

3.  运行时链接程序

4.  共享目标文件

5.  应用程序二进制接口与版本控制

6.  支持接口

7.  目标文件格式

8.  线程局部存储

9.  Mapfile

A.  链接编辑器快速参考

B.  版本控制快速参考

C.  使用动态字符串标记建立依赖性

D.  直接绑定

E.  System V 发行版 4(版本 1)Mapfile

F.  链接程序和库的更新及新增功能

索引

调用链接编辑器

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

直接调用

直接调用链接编辑器时,必须提供创建预期输出所需的每个目标文件和库。链接编辑器对创建输出时要使用的目标文件模块或库不做任何假设。例如,以下命令将指示链接编辑器仅使用输入文件 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

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


32 位链接编辑器和 64 位链接编辑器

链接编辑器以 32 位应用程序和 64 位应用程序的形式提供。每种链接编辑器都可以对 32 位目标文件和 64 位目标文件执行操作。但是,在一个链接编辑过程中不能同时处理 32 位目标文件和 64 位目标文件。虽然 32 位链接编辑器可以生成 64 位目标文件,但是生成的目标文件(不包括 .bss)的大小限制为 2 GB。

缺省情况下,编译器驱动程序执行 32 位链接编辑器。该链接编辑器会检查命令行,确定是否应执行 64 位链接编辑器来完成链接编辑。

通常,不需要使用命令行选项来区分 32 位链接编辑或 64 位链接编辑。链接编辑器使用命令行中第一个可重定位目标文件的 ELF 类来控制操作的模式。专用链接编辑(例如,完全来自 mapfile 或归档库的链接)不受命令行目标文件影响。这些链接编辑缺省为 32 位模式,需要使用一个命令行选项启动 64 位链接编辑。

在下列任一情况下,将执行 64 位链接编辑器。

创建极大的 32 位目标文件可能会用尽可供 32 位链接编辑器使用的虚拟内存。可使用 -z altexec64 选项强制使用关联的 64 位链接编辑器。64 位链接编辑器可提供更大的虚拟地址空间供生成 32 位目标文件。


注 - 也可以使用环境变量 LD_ALTEXEC 指定替代链接编辑器。


跨链接编辑

对于 SPARC 或 x86 目标,链接编辑器是一个交叉链接编辑器,可以链接 32 位目标文件或 64 位目标文件。不允许混用 32 位目标文件和 64 位目标文件。同样,只允许单个计算机类型的目标文件。

通常,不需要使用命令行选项来区分链接编辑目标。链接编辑器使用命令行中第一个可重定位目标文件的 ELF 计算机类型来控制操作的模式。专用链接编辑(例如,完全来自 mapfile 或归档库的链接)不受命令行目标文件影响。这些链接编辑缺省为 32 位本机目标。要显式定义链接编辑目标,可使用 -z target 选项。