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

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



