我正在为Android应用程序编写基于ARM NEON的代码,而且我正在努力解决某些编译器标记不被识别的问题。后来我意识到对这些标志的支持只是在最近才添加的,而且我的GCC版本比较老。我在Windows上做了所有事情,并且受到Cygwin提供的版本的限制。这里是我的问题:在我尝试在Windows机器上构建GCC 4.6.0并使Cygwin喜欢它之前,它会对我工作还是NDK使用它自己的GCC版本,并且我的升级完全不会影响它?如果是这样,是否可以告诉它使用不同的编译器?Android NDK使用哪种编译器?
19
A
回答
10
NDK本身调用构建在arm-eabi-gcc
编译器上的定制交叉编译器。有些人使用支持ARM指令集的bog标准GCC实现来创建自定义工具链,但这不是我的联盟。我以前阅读过的大部分内容都是使用NDK附带的工具链来编译本机代码。
推论:大多数抱怨并且必须制作自己的工具链的人都对那些对NDK工具链编译器的(假设的)C++支持不满意的人感到不满。我不能说这个,因为一些文章比较老,而且Android的变化非常迅速。这也不是一个似乎太频繁出现的意见。
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
如何编译器之间的切换被要求在:
- How to switch between gcc and clang in Android NDK Revision 11?
- Latest C++11 features with Android NDK
而且你可以很容易地检查:
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
。
相关问题
- 1. 使用Android NDK编译libpcap
- 2. NDK Android编译各种扩展文件
- 3. 在android ndk编译fftw3 ndk
- 4. 交叉编译为Android使用NDK失败,编译器错误
- 5. NetBeans使用哪种Java编译器?
- 6. 要使用哪种D编译器?
- 7. Android NDK不编译
- 8. Android编译库NDK
- 9. 用Android NDK编译PugiXML
- 10. 在编译保存期间VS2015使用哪种Typescript编译器
- 11. 使用NDK为Android编译OpenALPR
- 12. 使用Android编译FFmpeg 3.1.1 for x86 NDK
- 13. 使用Android NDK交叉编译
- 14. Android NDK编译器openssl发生错误
- 15. 的Android NDK编译GMP库
- 16. 在Android NDK中编译OpenCV
- 17. Android-NDK编译和链接
- 18. 的Android NDK编译错误
- 19. NDK错误编译
- 20. 编译本机代码使用NDK
- 21. 使用.lds脚本编译NDK程序
- 22. android JNI加载mupdf(用NDK编译?)
- 23. 用Android NDK编译Libtorrent Rasterbar任何人?
- 24. 哪个编译器用于通过ndk移植C++?
- 25. 我的iPhone应用程序使用哪种编译器
- 26. NDK编译错误:
- 27. 使用WebRTC编译ndk项目
- 28. 使用NDK编译C++本机活动
- 29. 编译NDK库
- 30. 使用NDK为Android编译汇编程序
它可能只是一个沼气标准的海湾合作委员会,但建立了正确的选项集。理论上,'gcc -v'输出应该显示一行'Configured with:...'显示GCC是如何构建的。当然,在NDK的某些'bin'目录中用'some-prefix-gcc'替换'gcc'。 – rubenvb
@rubenvb最有可能。但是因为我不能为谷歌发言,所以我不能以任何信心来说。 –
谢谢,有道理。 – Phonon