应用二进制接口
在软体开发中,应用二进制接口(,缩写为ABI)是指两程式模组间的接口;通常其中一个程式模组会是函式库或作业系统所提供的服务,而另一边的模组则是使用者所执行的程式。
一个ABI定义了机器码如何存取资料结构与运算程序,此处所定义的界面相当低阶并且相依于硬体。而类似概念的API则在原始码定义这些,则较为高阶,并不直接相依于硬体,通常会是人类可阅读的程式码。一个ABI常见的样貌即是调用约定:资料怎么成为计算程序的输入或者从中得到输出;x86的调用约定即是一个ABI的例子。
决定要不要采取既定的ABI(不论是否由官方提供),通常由编译器,作业系统或函式库的开发者来决定;然而,如果撰写一个混和多个程式语言的应用程式,就必须直接处理ABI,采用来达成此目的。
描述.
ABI涵盖了各种细节,如:
一个完整的ABI,像(iBCS),允许支持它的操作系统上的程序不经修改在其他支持此ABI的操作系统上运行。
其他的ABI标准化了一些细节,包括C++名字修饰 ,和同一个平台上的编译器之间的调用约定,但是不包括跨平台的兼容性。
ABI不同于应用程序接口(API),API定义了源代码和库之间的接口,因此同样的代码可以在支持这个API的任何系统中编译,然而ABI允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行。
在Unix风格的操作系统中,存在很多运行在同一硬件平台上互相相关但是不兼容的操作系统(尤其是Intel 80386兼容系统)。有一些努力尝试标准化ABI,以减少销售商将程序移植到其他系统时所需的工作。然而,直到现在还没有很成功的例子,虽然Linux标准化工作组正在为Linux做这方面的努力。
EABI.
嵌入式应用二进制接口指定了文件格式、数据类型、寄存器使用、堆积组织优化和在一个嵌入式软件中的参数的标准约定。开发者使用自己的汇编语言也可以使用EABI作为与兼容的编译器生成的汇编语言的接口。
支持EABI的编译器创建的目标文件可以和使用类似编译器产生的代码兼容,这样允许开发者链接一个由不同编译器产生的库。EABI与关于通用计算机的ABI的主要区别是应用程序代码中允许使用特权指令,不需要动态链接(有时是禁止的),和更紧凑的堆栈帧组织用来节省内存。
广泛使用EABI的有Power PC和ARM.
生成维基百科快照图片,大概需要3-30秒!