Solaris ABI 是一组受支持的运行时接口,可供应用程序在 Solaris 操作系统中使用。下面列出了最重要的 ABI 组件:
Solaris 系统库提供的接口,在手册页的第 3 节介绍
Solaris 内核系统调用提供的接口,在手册页的第 2 节介绍
各种系统文件和目录的位置及格式,在手册页的第 4 节介绍
Solaris 实用程序的输入和输出语法及语义,在手册页的第 1 节介绍
Solaris ABI 的主要组件是一组系统库接口。本章中的术语 ABI 专指此组件。ABI 仅包含 C 语言接口,因为 Solaris 操作系统仅为 C 语言提供接口。
写入 Solaris API(Application Programming Interface,应用编程接口)的 C 源代码将通过 C 编译器转换为四个 ABI 版本之一的二进制形式。这四个版本包括:
32 位 SPARC
64 位 SPARC
32 位 x86
64 位 x86 (Opteron)
尽管 ABI 与 API 非常相似,但是源代码编译过程还是有一些明显差异:
编译器指令(如 #define)可以更改或替换源代码级别的构造。生成的二进制内容可能缺少源代码中存在的符号,或者包含源代码中不存在的符号。
编译器可能会生成特定于处理器的符号(如算术指令),用于扩充或替换源代码的构造。
编译器的二进制布局可能特定于此编译器以及此编译器接受的源代码语言的版本。 这种情况下,使用不同编译器编译的相同代码可能会生成不兼容的二进制内容。
由于这些原因,源代码级别 (API) 兼容性无法在各 Solaris 发行版之间实现所要求的二进制兼容性。
Solaris ABI 由操作系统提供的支持接口构成。系统可用的接口中有一些旨在专供操作系统使用。这些专用接口不能被应用程序使用。在 SunOS 5.6 发行版之前,Solaris 库中的所有接口均可供应用程序开发者使用。利用 Solaris 链接编辑器中的库符号作用域技术,可以将不计划在库外部使用的接口的作用域缩小为完全在局部使用。有关详细信息,请参见《链接程序和库指南》。由于系统要求,并非所有专用接口都具有此类缩小了的作用域。这些接口会标记为专用,并且不包括在 Solaris ABI 中。