簡介
ABI涵蓋了各種細節,如:
ABI不同於
API ,API定義了
原始碼和庫之間的接口,因此同樣的代碼可以在支持這個API的任何系統中編譯 ,然而ABI允許編譯好的
目標代碼在使用兼容ABI的系統中無需改動就能運行。 ABI掩蓋了各種細節,例如:調用約定控制著函式的參數如何傳送以及如何接受返回值;
系統調用的編碼和一個套用如何向作業系統進行系統調用;以及在一個完整的作業系統ABI中,對象檔案的二進制格式、
程式庫等等。一個完整的ABI,像 Intel二進制兼容標準 (iBCS) ,允許支持它的作業系統上的程式不經修改在其他支持此ABI的作業系統上運行。其他的 ABI 標準化細節包括C++ name decoration和同一個平台上的
編譯器之間的調用約定,但是不包括
跨平台的兼容性。在
Unix的作業系統中,存在很多運行在同一件平台上互相相關但是不兼容的作業系統(尤其是80386兼容系統)。有一些努力嘗試標準化A I,以減少銷售商將程式移植到其他系統時所需的工作。然而,直到現在還沒有很成功的例子,雖然LSB正在為
Linux做這方面的努力。
它描述了應用程式與OS之間的底層接口。ABI涉及了程式的各個方面,比如:目標檔案格式、數據類型、數據對齊、
函式調用約定以及函式如何傳遞參數、如何返回值、
系統調用號、如何實現系統調用等。
一套完整的ABI(比如:
Intel Binary Compatibility Standard (iBCS)),可以讓程式在所有支持該ABI的系統上運行,而無需對程式進行修改。
嵌入式套用二進制接口
嵌入式套用二進制接口 EABI: embedded application binary interface指定了檔案格式、數據類型、
暫存器使用、堆積組織最佳化和在一個
嵌入式軟體中的參數的標準約定。開發者使用自己的
彙編語言也可以使用EABI作為與兼容的
編譯器生成的彙編語言的接口。 支持EABI的編譯器創建的
目標檔案可以和使用類似編譯器產生的代碼兼容,這樣允許開發者連結一個由不同編譯器產生的庫。EABI與關於
通用計算機的ABI的主要區別是應用程式代碼中允許使用
特權指令,不需要
動態連結(有時是禁止的),和更緊湊的
堆疊幀組織用來節省記憶體。 廣泛使用
EABI的有Power PC和ARM。