Android NDK使用哪个编译器?

我正在为Android应用程序编写基于ARM NEON的代码,而且我正在努力解决某些编译器标记不被识别的问题。 后来我意识到对这些标志的支持只是最近才join的,而且我的GCC版本比较老。 我正在做Windows上的所有事情,并受到Cygwin提供的版本的限制。 这里是我的问题:在我开始尝试在Windows机器上构buildGCC 4.6.0并使Cygwin喜欢它,它会对我工作还是NDK使用它自己的GCC版本,我的升级完全不会影响它? 如果是这样,是否有可能告诉它使用不同的编译器?

Solutions Collecting From Web of "Android NDK使用哪个编译器?"

NDK本身调用一个基于arm-eabi-gcc编译器的定制交叉编译器。 有些人使用支持ARM指令集的bog标准GCC实现来创build自定义工具链,但这是我的联盟。 我以前阅读过的大部分内容总是使用NDK附带的工具链来编译本机代码。

推论:大多数抱怨并且不得不自制工具链的人都是对NDK工具链的编译器(假设的)支持C ++的支持感到不满的人。 我不能说这个,因为一些文章更老,And​​roid的变化如此之快。 这也不是一个似乎太频繁出现的意见。

关于NDK r8d,可以用两种方法修改(参见Andriod ndk ):

  • 对于ndk-build,导出NDK_TOOLCHAIN_VERSION = 4.7variables或将其添加到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 11(2016年3月)

官方修订历史上提到: https : //developer.android.com/ndk/downloads/revision_history.html

问:如何在编译器之间切换

  • 如何在Android NDK修订版11中切换gcc和clang?
  • Android NDK的最新C ++ 11function

你可以很容易地检查:

 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 

然后只是logging或返回到一个TextView