簡體   English   中英

Android NDK 使用哪個編譯器?

[英]Which compiler does Android NDK use?

我正在為 Android 應用程序編寫基於 ARM NEON 的代碼,但我正在努力解決某些編譯器標志無法識別的問題。 后來我意識到對這些標志的支持是最近才添加的,而且我的 GCC 版本較舊。 我正在 Windows 上做所有事情,並且受到 Cygwin 提供的版本的限制。 Here's my question: before I go and try to build GCC 4.6.0 on my Windows machine and make Cygwin like it, will it work for me or does the NDK use its own version of the GCC and my upgrade will not at all affect it ? 如果是這樣,是否可以告訴它使用不同的編譯器?

關於 NDK r8d,它可以通過 2 種方式進行修改(參見Andriod ndk ):

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

默認編譯器在 ndk/build/core/setup-toolchain.mk 中設置(參見 NDK_TOOLCHAIN 和 NDK_TOOLCHAIN_VERSION)

NDK 本身調用基於arm-eabi-gcc編譯器的定制交叉編譯器。 有一些例子表明人們使用沼澤標准 GCC 實現創建自定義工具鏈,並支持 ARM 指令集,但這超出了我的范圍。 我過去讀過的大部分內容都討論過使用 NDK 中包含的工具鏈來編譯本機代碼。

推論:大多數抱怨並不得不制作自己的工具鏈的人都是對 NDK 工具鏈編譯器的(假定的)低於標准的 C++ 支持感到不滿的人。 我不能這么說,因為有些文章比較舊,而且 Android 變化如此之快。 這也不是一個似乎經常出現的意見。

自 NDK 11(2016 年 3 月)起,GCC 已棄用,取而代之的是 clang

官方修改歷史上提到: 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM