2011-07-06 140 views
19

我正在爲Android應用程序編寫基於ARM NEON的代碼,而且我正在努力解決某些編譯器標記不被識別的問題。後來我意識到對這些標誌的支持只是在最近才添加的,而且我的GCC版本比較老。我在Windows上做了所有事情,並且受到Cygwin提供的版本的限制。這裏是我的問題:在我嘗試在Windows機器上構建GCC 4.6.0並使Cygwin喜歡它之前,它會對我工作還是NDK使用它自己的GCC版本,並且我的升級完全不會影響它?如果是這樣,是否可以告訴它使用不同的編譯器?Android NDK使用哪種編譯器?

回答

10

NDK本身調用構建在arm-eabi-gcc編譯器上的定製交叉編譯器。有些人使用支持ARM指令集的bog標準GCC實現來創建自定義工具鏈,但這不是我的聯盟。我以前閱讀過的大部分內容都是使用NDK附帶的工具鏈來編譯本機代碼。

推論:大多數抱怨並且必須製作自己的工具鏈的人都對那些對NDK工具鏈編譯器的(假設的)C++支持不滿意的人感到不滿。我不能說這個,因爲一些文章比較老,而且Android的變化非常迅速。這也不是一個似乎太頻繁出現的意見。

+4

它可能只是一個沼氣標準的海灣合作委員會,但建立了正確的選項集。理論上,'gcc -v'輸出應該顯示一行'Configured with:...'顯示GCC是如何構建的。當然,在NDK的某些'bin'目錄中用'some-prefix-gcc'替換'gcc'。 – rubenvb

+0

@rubenvb最有可能。但是因爲我不能爲谷歌發言,所以我不能以任何信心來說。 –

+0

謝謝,有道理。 – Phonon

18

關於NDK R8D它可以在2種方法(參見Andriod ndk)來修改:

  • 對於NDK建造,導出NDK_TOOLCHAIN_VERSION = 4.7變量或將其添加到Application.mk。
  • 對於獨立構建,添加--toolchain =選項make-standalone-toolchain.sh --toolchain=arm-linux-androideabi-4.7

默認編譯器在NDK /建造/型芯/ setup-toolchain.mk設置(參見NDK_TOOLCHAIN和NDK_TOOLCHAIN_VERSION)

6

GCC是有利於鐺的,不贊成使用NDK 11(2016年3月)

提到的官方版本的歷史:https://developer.android.com/ndk/downloads/revision_history.html

如何編譯器之間的切換被要求在:

而且你可以很容易地檢查:

enum CONSTEXPR {N = 256}; 
char s[N]; 
#ifdef __clang__ 
     snprintf(s, N, "%s", "clang" __clang_version__); 
#else 
# ifdef __GNUC__ 
     snprintf(s, N, "%s %d.%d.%d", "gcc", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__); 
# endif 
#endif 

然後只需登錄s或迴歸它到TextView