Linux系统编程基础:API、ABI、标准与文件系统详解
1. API与ABI的概念
在软件开发领域,API(应用程序编程接口)常被称为“契约”,但严格来说这并不准确,因为API并非双向协议。API用户(通常是高级软件)对API及其实现没有任何输入权,只能选择使用或不使用。API的主要作用是确保遵循它的两个软件在源代码层面兼容,即API用户能针对API实现成功编译代码。例如,C标准定义并由标准C库实现的接口就是API的一个实际例子,它定义了诸如内存管理和字符串处理等基本且必要的函数族。
而ABI(应用程序二进制接口)则定义了特定架构下两个或多个软件之间的二进制接口。它规定了应用程序自身、应用程序与内核以及应用程序与库之间的交互方式。与API确保源代码兼容性不同,ABI确保二进制兼容性,保证目标代码在具有相同ABI的任何系统上无需重新编译即可运行。
ABI涉及的问题包括调用约定、字节顺序、寄存器使用、系统调用调用、链接、库行为和二进制对象格式等。例如,调用约定定义了函数的调用方式、参数传递方式、哪些寄存器需要保留、哪些会被修改以及调用者如何获取返回值。
尽管人们曾多次尝试为特定架构在多个操作系统上定义单一的ABI(特别是Unix系统上的i386架构),但这些努力并未取得太大成功。包括Linux在内的操作系统倾向于根据自身需求定义自己的ABI。ABI与架构密切相关,大多数ABI都涉及特定机器的概念,如特定的寄存器或汇编指令。因此,在Linux上,每种机器架构都有自己的ABI,通常以机器名称来称呼特定的ABI,如Alpha或x86 - 64。
系统程序员应该了解ABI,但通常无需记住它。ABI由工具链(如编译器、链接器等)强制执行,一般不会直接
超级会员免费看
订阅专栏 解锁全文
597

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



