Linux系统编程基础:API、ABI、标准与文件系统
1. API与ABI概述
1.1 API(应用程序编程接口)
API常被称为“契约”,但严格来说,至少从法律意义上讲,这种说法并不准确,因为API并非双向协议。API用户(通常是高层软件)对API及其实现没有任何输入权,只能选择使用或不使用该API。API的作用是确保如果两个软件都遵循它,它们在源代码层面是兼容的,即API用户能针对API的实现成功编译代码。
例如,C标准定义并由标准C库实现的接口就是一个典型的API。这个API定义了一系列基本且重要的函数,如内存管理和字符串处理例程。
1.2 ABI(应用程序二进制接口)
与API定义源代码接口不同,ABI定义了特定架构下两个或多个软件之间的二进制接口。它规定了应用程序自身、应用程序与内核以及应用程序与库之间的交互方式。API确保源代码兼容性,而ABI确保二进制兼容性,保证一个目标代码片段能在任何具有相同ABI的系统上运行,无需重新编译。
ABI涉及的问题包括调用约定、字节顺序、寄存器使用、系统调用调用方式、链接、库行为和二进制对象格式等。以调用约定为例,它定义了函数的调用方式、参数传递方式、哪些寄存器需要保留以及调用者如何获取返回值。
虽然人们曾多次尝试为给定架构(特别是Unix系统上的i386架构)在多个操作系统中定义单一的ABI,但这些努力并未取得太大成功。相反,包括Linux在内的操作系统倾向于自行定义适合自身的ABI。ABI与架构紧密相关,其大部分内容都涉及特定于机器的概念,如特定的寄存器或汇编指令。因此,在Linux中,每种机器架构都有自己的ABI,通常以机器名称来称呼特定的
超级会员免费看
订阅专栏 解锁全文
3

被折叠的 条评论
为什么被折叠?



