1. ABI 解決什么問題
一個應用程序的運行,需要諸多相關的庫文件來支撐的。在Windows當中的庫文件是*.dll(動態鏈接庫)而Linux當中的庫文件是*.so(共享對象)。這樣編寫的程序,是不能跨平臺的,為解決這樣的問題,ABI應運而生(Application Binary Interface 應用程序二進制接口)。
2. ABI 是什么
每個操作系統都會為運行在該系統下的應用程序提供應用程序二進制接口(ABI)。ABI包含了應用程序在這個系統下運行時必須遵守的變成約定,一系列的系統調用和使用這些系統調用的方法,以及關于程序可以使用的內存地址和使用機器寄存器的規定。
3 . ABI不同于API
應用二進制接口,描述了應用程序和操作系統之間,一個應用和它的庫之間,或者應用的組成部分之間的低層接口。
ABI不同于應用程序接口(API),API定義了源代碼和庫之間的接口,因此同樣的代碼可以在支持這個API的任何系統中編譯,然而ABI允許編譯好的目標代碼在使用兼容ABI的系統中無需改動就能運行。
ABI掩蓋了各種細節,例如:調用約定(控制著函數的參數如何傳送以及如何接受返回值);系統調用的編碼和一個應用如何向操作系統進行系統調用;以及在一個完整的操作系統ABI中,目標文件的二進制格式、程序庫等等。