織夢CMS - 輕松建站從此開始!

羅索

當前位置: 主頁>嵌入式開發>Android>

對于Android NDK編譯器ARM和Thumb模式的理解及Toolchain的切換cl

落鶴生 發布于 2015-09-16 10:14 點擊:次 
以前在做Symbian的時候,曾經研究過ARM CPU的指令集問題,ARM處理器支持兩套指令集,即ARM和Thumb。ARM為32位指令集而Thumb為16位指令集,理論上32位可以提供更快的 執行速度但會生成更大的二進制執行文件,而16位的Thumb則恰恰相反
TAG: NDK  thumb  

以前在做Symbian的時候,曾經研究過ARM CPU的指令集問題,ARM處理器支持兩套指令集,即ARM和Thumb。ARM為32位指令集而Thumb為16位指令集,理論上32位可以提供更快的 執行速度但會生成更大的二進制執行文件,而16位的Thumb則恰恰相反,省地但慢,這也正是體現出了ARM對于嵌入式設備的專業性。對于我這種犧牲一切 換速度的理念來說,當時就留下了ARM就比Thumb快的印象,以緻于現在在做Android NDK原生開發時,也是優先用ARM指令集。(這個可以通過在Android.mk中加入LOCAL_ARM_MODE := arm控制,默認情況下NDK使用Thumb指令集)

但是最近在Xcode編譯iOS項目時,注意到同為ARM處理器的蘋果設備,使用的是Thumb指令集,而且好像還是某種新版本的Thumb指令集,小搜索了一下看到有人說這種armv7引入的叫做Thumb-2的指令集要比arm指令集更好!于是又重新搜索更新了一下大腦知識庫…

armv7對于蘋果設備來說,意味着iPhone 3GS以上級别的設備的CPU,而目前主流的Android設備幾乎全是armv7處理器的了。也許對于早起的armv6處理器來說,ARM指令集還有優 勢,但是對于新的v7處理器,各種資料都表明Thumb-2要更好一些。

總的來說,ARM指令集會在某些方面有優勢,比如手寫彙編(額…),而Thumb則能生成更精簡的代碼,而且還有一點我之前沒有太意識到的問題就是:省電!所以仔細斟酌後,我還是決定把NDK編譯選項由原來的ARM改回默認的Thumb,遵循默認原則吧還是。

而對于v7和非v7的問題,Android上可以這樣處理,以略增大apk為代價,加入單獨針對v7和非v7版的so文件,這樣apk在安裝時會自動根據目标設備的CPU安裝合适的so庫,從而達到更好的效果,具體做法是在Application.mk中加入”APP_ABI := armeabi armeabi-v7a"

另外,随着項目規模的增大,代碼編譯生成時間會大大增加,這時候可以考慮更換r8c版NDK新加入的Clang編譯器(蘋果家的編譯器,新版 Xcode默認就用它),實測發現Clang比GCC明顯快很多,而且對于warning, error的顯示也比GCC要人性的多(有人說GCC的提示就像是天書,呵呵),不過據說Clang也有一些不足,比如對于标準的支持不如GCC(這話怎 麼聽着像是說MS的…),不如GCC支持的語言廣等,但感覺對于Android原生開發來說都是些無關緊要的事,我隻要編譯快,運行快就好了!

改用Clang編譯器的方法如下:

對于ndk-build方式,可以使用“export NDK_TOOLCHAIN_VERSION=clang3.1”導出環境變量,或者将這個環境變量設置加入到Application.mk中。

對于獨立編譯方式,在make-standalone-toolchain.sh腳本中加入–llvm-version=3.1 并在makefile中用<tool-path>/bin/clang and <tool-path>/bin/clang++替換 CC 和CXX 參數。

PS:實際編譯時發現Clang好像對中文注釋支持不是特别好,比如有端代碼在if(…)後謝了//中文注釋,導緻編譯器處理至此處時直接報了異常,删除注釋後就沒事了…

參考文章:

  • Producing optimised NDK code for multiple architectures?  #
  • Is there a way to compile for ARM rather than Thumb in Xcode 4?  #
(k-res)
本站文章除注明轉載外,均為本站原創或編譯歡迎任何形式的轉載,但請務必注明出處,尊重他人勞動,同學習共成長。轉載請注明:文章轉載自:羅索實驗室 [#/a/201509/17383.html]
本文出處:k-res 作者:k-res 原文
頂一下
(0)
0%
踩一下
(0)
0%
------分隔線----------------------------
發表評論
請自覺遵守互聯網相關的政策法規,嚴禁發布色情、暴力、反動的言論。
評價:
表情:
用戶名: 驗證碼:點擊我更換圖片
欄目列表
将本文分享到微信
推薦内容

http://m.juhua536373.cn|http://wap.juhua536373.cn|http://www.juhua536373.cn||http://juhua536373.cn