在 SolarisTM 操作系统 (Solaris Operating System, Solaris OS) 中,应用程序开发者可以使用链接编辑器 ld(1) 创建应用程序和库,并且可以借助于运行时链接程序 ld.so.1(1) 来执行这些目标文件。本手册适用于需要更加全面地了解使用 Solaris 链接程序过程中所涉及的概念的工程师。
此 Solaris 发行版支持使用以下 SPARC® 和 x86 系列处理器体系结构的系统:UltraSPARC ®、SPARC64、AMD64、Pentium 和 Xeon EM64T。支持的系统可以在 http://www.sun.com/bigadmin/hcl 上的《Solaris 10 Hardware Compatibility List》中找到。本文档列举了在不同类型的平台上进行实现时的所有差别。
在本文档中,这些与 x86 相关的术语表示以下含义:
“x86” 泛指 64 位和 32 位的 x86 兼容产品系列。
“x64” 指出了有关 AMD64 或 EM64T 系统的特定 64 位信息。
“32 位 x86” 指出了有关基于 x86 的系统的特定 32 位信息。
若想了解本发行版支持哪些系统,请参见《Solaris 10 Hardware Compatibility List》。
本手册介绍了 Solaris 链接编辑器和运行时链接程序的操作。由于动态可执行文件和共享库在动态运行时环境中非常重要,因此将重点介绍这两者的生成和用法。
本手册适用于对 Solaris 链接程序感兴趣的程序员(从好学的初级用户到高级用户)。
初级程序员可以了解链接编辑器和运行时链接程序的基本操作。
中级程序员可以了解如何创建、使用以及有效地自定义库。
高级程序员(例如语言工具开发者)可以了解如何解释和生成目标文件。
大多数程序员都不需要从头至尾阅读本手册。
第 1 章,Solaris 链接程序介绍概述 Solaris OS 下的链接进程。本章适用于所有程序员。
第 2 章,链接编辑器介绍链接编辑器的功能。本章适用于所有程序员。
第 3 章,运行时链接程序介绍代码和数据的执行环境和程序控制的运行时绑定。本章适用于所有程序员。
第 4 章,共享库提供共享库的定义,介绍它们的机制,并说明如何创建和使用它们。本章适用于所有程序员。
第 5 章,应用程序二进制接口与版本控制介绍如何管理动态库提供的接口的演变。本章适用于所有程序员。
第 6 章,支持接口介绍用于监视、在某些情况下用于修改、用于链接编辑器和运行时链接程序处理的接口。本章适用于高级程序员。
第 7 章,目标文件格式是有关 ELF 文件的参考章节。本章适用于高级程序员。
第 8 章,线程局部存储介绍线程局部存储。本章适用于高级程序员。
第 9 章,Mapfile 选项介绍链接编辑器的 mapfile 指令,这些指令指定输出文件的布局。本章适用于高级程序员。
附录 A,链接编辑器快速参考 概述最常用的链接编辑器选项,本附录适用于所有程序员。
附录 B,版本控制快速参考 提供共享库版本控制的命名约定和原则,本附录适用于所有程序员。
附录 C,使用动态字符串标记建立依赖性 提供如何使用保留的动态字符串标记定义动态依赖性的示例,本附录适用于所有程序员。
附录 D,链接程序和库的更新及新增功能 概述已添加到链接编辑器的新增功能和更新,并指示已添加这些新增功能和更新的发行版。
在本文档中,所有命令行示例均使用 sh(1) 语法。所有编程示例均采用 C 语言编写。
Sun Web 站点提供有关以下附加资源的信息:
下表介绍了本书中的印刷约定。
表 P–1 印刷约定
字体 |
含义 |
示例 |
---|---|---|
AaBbCc123 |
命令、文件和目录的名称;计算机屏幕输出 |
编辑 .login 文件。 使用 ls -a 列出所有文件。 machine_name% you have mail. |
AaBbCc123 |
用户键入的内容,与计算机屏幕输出的显示不同 |
machine_name% su Password: |
aabbcc123 |
要使用实名或值替换的命令行占位符 |
删除文件的命令为 rm filename。 |
AaBbCc123 |
保留未译的新词或术语以及要强调的词 |
这些称为 Class 选项。 注意:有些强调的项目在联机时以粗体显示。 |
新词术语强调 |
新词或术语以及要强调的词 |
高速缓存是存储在本地的副本。 请勿保存文件。 |
《书名》 |
书名 |
阅读《用户指南》的第 6 章。 |
下表列出了 C shell、Bourne shell 和 Korn shell 的缺省 UNIX® 系统提示符和超级用户提示符。
表 P–2 Shell 提示符
Shell |
提示符 |
---|---|
C shell |
machine_name% |
C shell 超级用户 |
machine_name# |
Bourne shell 和 Korn shell |
$ |
Bourne shell 和 Korn shell 超级用户 |
# |