目錄編譯引數
參考c型別的表示(int, short,long, union…)
呼叫約定,包括如何傳遞引數和返回值;使用暫存器和堆疊。
編譯器將**直接編譯成硬體浮點協處理器(浮點運算單元fpu)能識別的指令,這些指令在執行的時候arm核直接把它轉給協處理器執行。fpu 通常有一套額外的暫存器來完成浮點引數傳遞和運算。使用實際的硬體浮點運算單元(fpu)會帶來效能的提公升。
使用硬浮點時,需要給編譯器傳遞-mfpu
和-mfloat-abi
引數,讓編譯器編譯出硬體浮點單元(fpu)處理器能識別的指令
編譯器把浮點運算轉成浮點運算的函式呼叫和庫函式呼叫,沒有fpu的指令呼叫,也沒有浮點暫存器的引數傳遞。浮點引數的傳遞也是通過arm暫存器或者堆疊完成。如果系統沒有任何浮點處理器單元,使用hard-float就會產生非法指令和異常。因而一般的系統映象都採用軟浮點以相容沒有vfp的處理器。
arm處理器每個核使用不同的arm體系結構版本,每個版本對應的指令集也可能不同;編譯優化時可能根據架構指令集不同進行不同的優化。所以選喲指定編譯時arm架構(即**要執行的架構),
soft(軟浮點):表明不是用fpu硬體,使用gcc整數算術庫來模擬浮點運算
softfp(硬浮點):表明要使用fpu硬體來做浮點運算,函式的引數傳遞到整數暫存器(r0-r3)中,然後再傳遞到fpu。目的是為了生成的**採用相容軟浮點呼叫介面(即使用-mfloat-abi=soft時的呼叫介面),這樣帶來的好處是:相容性和靈活性。
實際也可以這樣應用:庫可以採用-mfloat-abi=soft編譯,而關鍵的應用程式可以採用-mfloat-abi=softfp來編譯。hard(硬浮點):表明要使用fpu硬體來做浮點運算,並且函式的引數直接傳遞到fpu的暫存器(s0、d0)。這樣要求
所有庫和應用程式必須採用這同乙個引數來編譯
,否則連線時會出現介面不相容錯誤.
注意armv7系列基本都有硬浮點,所以一般都選擇softfp的方式。
引數-mfpu就是用來指定要產生哪種硬體浮點運算指令。常用的有vfpv3,vfpv4,neon等,hi3536 a17支援的是neon+vfpv4相結合的結構。
coolice87
Cmake入門(一)基本編譯命令
首先,對於最簡單的,把乙個cpp檔案編譯成乙個可執行檔案,需要對cmakelists.txt中寫入如下三步內容 宣告cmake的最低版本 cmake minimum required version 3.0 宣告乙個cmake工程 project hello 新增乙個可執行程式 add execut...
cmake 交叉編譯 x265到 arm32庫
搞了好幾天一直有問題,告訴我編譯器找不到,一直認為只要使用ndk裡面的編譯器就行了,但一直出問題,原來不是這樣的,要再裝乙個交叉編譯器,還以為搞不定了,幸好啊 arm linux gcc v檢視有沒有安裝成功 3 現在開始修改x265的cmakelist.txt資訊,x265的編譯有兩種方式,第一種...
乙個CMake編譯問題的解決過程
如果將整個產品進行更新後,發現裝置和模擬器通訊不正常。實際的表象是這樣的,其實是忽略了乙個實際情況 老的應用使用之前的makefile直接make編譯而來,部分更新的時候,自己就是直接make生成進行的區域性替換,而全部替換是使用後來自己加入的cmake的方式進行的。這是問題的根源所在 開始的時候著...