Android NDK使用哪种编译器?

Pho*_*non 21 compiler-construction android gcc arm android-ndk

我正在为Android应用程序编写基于ARM NEON的代码,我正在努力解决某些编译器标志无法识别的问题.我后来意识到对这些标志的支持最近才添加,而且我的GCC版本更旧了.我正在Windows上做整件事,并受到Cygwin提供的版本的限制.这是我的问题:在我尝试在我的Windows机器上构建GCC 4.6.0并让Cygwin喜欢它之前,它会对我有用还是NDK使用自己的GCC版本而我的升级根本不会影响它?如果是,是否可以告诉它使用不同的编译器?

小智 18

关于NDK r8d,它可以通过两种方式进行修改(参见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)


Dou*_*hen 11

NDK本身调用基于编译器的定制交叉编译arm-eabi-gcc器.有些人使用bog标准的GCC实现来创建自定义工具链,并支持ARM指令集,但这种情况已经超出了我的联盟.我过去阅读的大多数内容总是使用NDK附带的工具链来讨论编译本机代码.

推论:大多数抱怨并且不得不制作自己的工具链的人都是那些对NDK工具链编译器的(假设的)低于标准的C++支持感到不安的人.我不能说这个,因为有些文章比较老,而Android的变化也很快.它也不是一个似乎经常出现的意见.

  • 它可能只是一个沼泽标准的GCC,但是使用正确的选项集构建.从理论上讲,`gcc -v`输出应该显示一行`Configured with:...`,显示GCC是如何构建的.当然,在NDK的某个`bin`目录中用匹配的`some-prefix-gcc`替换`gcc`. (4认同)
  • 您可以下载NDK,并且将有一个build/tools/toolchain-patches文件夹,其中大部分是"琐碎的"GCC构建补丁,可以与Android的系统库一起使用.所以是的,简单的海湾合作委员会(几乎)是. (3认同)

Cir*_*四事件 7

截至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
Run Code Online (Sandbox Code Playgroud)

然后只需记录s或返回到TextView.