ABI與EABI ABI: Application Binary Interface (ABI) for the ARM Architecture 應用程式機器二元碼介面 (英語: application binary interface ,縮寫為 ABI )是指兩程式模組間的介面;通常其中一個程式模組會是函式庫或作業系統所提供的服務,而另一邊的模組則是使用者所執行的程式。 一個ABI定義了機器碼如何存取資料結構與運算程式,此處所定義的介面相當低階並且相依於硬體。 EABI就是Embedded ABI arm-linux-gnueabi 和 arm-linux-gnueabihf 在debian源裏這兩個交叉編譯器的定義如下: gcc-arm-linux-gnueabi - The GNU C compiler for armel architecture gcc-arm-linux-gnueabihf - The GNU C compiler for armhf architecture 可見這兩個交叉編譯器适用於armel和armhf兩個不同的架構, armel和armhf這兩種架構在對待浮點運算採取了不同的策略(有fpu的arm才能支持這兩種浮點運算策略) 其實這兩個交叉編譯器只不過是gcc的選項-mfloat-abi的默認值不同。gcc的選項-mfloat-abi有三種值soft,softfp,hard(其中後兩者都要求arm裏有fpu浮點運算單元,soft與後兩者是兼容的,但softfp和hard兩種模式互不兼容): soft : 不用fpu進行浮點計算,即使有fpu浮點運算單元也不用,而是使用軟體模式。 softfp : armel架構(對應的編譯器为gcc-arm-linux-gnueabi)採用的預設值,用fpu計算,但是傳参數用普通暫存器傳,這樣中斷的時候,只需要保存普通寄存器,中斷負荷小,但是参數需要轉換成浮點的再計算。 hard : armhf架構(對應的編譯器gcc-arm-linux-gnueabihf)采用的默認值,用fpu計算,傳参數也用fpu中的浮點暫存器傳,省去了轉換, 性能最好,但是中斷負荷高。 把以下測試使用的c