NDK r10d 升级 NDK r16b

NDK 升级变化

一、 r10c

  1. 添加clang 3.5 的支持,NDK_TOOLCHAIN_VERSION=clang 会使用3.5版本的clang
  2. 弃用gcc 4.6 ,并且会在后续版本中移除gcc 4.6
  3. 已知问题:gcc 4.9编译时,使用-Os会导致崩溃

二、r10d

  1. 32 位ABI 默认使用4.8编译,64位ABI默认使用4.9编译
  2. 已经修复r10c 出现的指定-Os 出现的崩溃问题

三、r10e

  1. 添加clang3.6,默认使用clang3.6,移除clang3.4
  2. 移除gcc4.6
  3. 在ld.gold链接时,针对所有架构添加线程支持,默认不添加
    要添加多线程编译,使用--threads
    默认不实用多线程编译,--no-threads

四、r11

  1. 强烈建议使用clang,并且clang更新到3.8svn
  2. 已经弃用gcc,由clang替代,gcc 也不会在升级
  3. 已经移除gcc4.8,现在所有的gcc编译都使用4.9
  4. 已经将构建系统使用-isystem
  5. 向API21 添加Vulkan 支持
  6. 已知问题
    1. x86 ASAN 目前无法运作
    2. Clang、x86、stlport_static 与 -O0 以上优化级别的组合会导致 dynamic_cast 测试失败
    3. 在ARM32 上使用c++_shared 时,异常处理会失效,根本原因在于,libc++abi 用于 ARM32 的 LLVM 展开程序与 libgcc 不兼容

五、r11b

  1. 修复 libc++工具链,之前已知缺少__cxxabi_config.h

六、r11c

  1. 修复脚本问题,ndk-gdb,ndk-which等

七、r12

  1. ndk-build 建议使用clang编译,在之后的版本中会移除gcc
  2. 已知问题
    1. x86 AddressSanitizer 工具无法使用
    2. c++_static 异常对android 9和14无效
    3. RenderScript 工具不存在

八、r13b

  1. gcc 不在支持, NDK_TOOLCHAIN_VERSION默认使用clang
  2. 因为gunstl 中有一部分和clang不兼容,以后可能会移除gunstl

九、 r14b

  1. 统一了头文件,以前每个Android版本都有自己的头文件,现在使用统一的头文件,默认未开启
  2. gcc 被弃用,使用gcc,通过-D__ANDROID_API__=$API指定具体的API

十、r15c

  1. 不在支持Android2.3(android-9),现在最低的版本是android 4.0(android-14)
  2. 默认使用统一头文件

十一、r16b

  1. 弃用armeabi、MIPS、MIPS64的支持
  2. 弃用旧的头文件,使用统一头文件

十二、r17c

  1. gnustl 和 stlport 已弃用
  2. 已移除对 ARMv5 (armeabi)、MIPS 和 MIPS64 的支持

十三、r18b

  1. 移除gcc
  2. gnustl、gabi++ 和 stlport 已移除
  3. 对android 14和15的支持已经移除

升级过程

  1. 在项目中,使用了一部分旧的头文件,当升级到r16b时,因为头文件统一的原因,有一部分头文件不在兼容。
    https://android.googlesource.com/platform/ndk/+/ndk-release-r16/docs/UnifiedHeadersMigration.md
    按照文档中描述的办法,使用deprecated-headers可以编译通过
  2. 不能使用android-9,最低使用android-14
  3. 因为之前项目中已知使用gunstl,但是在后续版本中移除了gunstl,所以修改为c++_static和c++_shared

遇到的问题

  1. 头文件被移除问题的问题
    通过deprecated-headers 兼容,但是注意,只能使用 gnustl 进行编译
  2. gnustl_static 改为 c++_static 时,出现各种未知问题
    导入了deprecated-headers,最后解决办法只能是删除deprecated-headers,并且修改所有被移除的头文件
  3. 引用的一部分库,使用的gcc 编译的
    在r13b 以后,ndk-build默认使用clang,而且在r18b以后,删除了c++,所以引用的库也需要通过clang编译
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 7,905评论 0 3
  • Android游戏开发实践(1)之NDK与JNI开发02 承接上篇Android游戏开发实践(1)之NDK与JNI...
    AlphaGL阅读 9,177评论 0 24
  • 说明 这只是笔记。。。。。。。。 从0开始搭建测试环境 下载android ndk ,然后配置ndk环境变量,使n...
    吉凶以情迁阅读 10,755评论 0 3
  • 一、NDK产生的背景 Android平台从诞生起,就已经支持C、C++开发。众所周知,Android的SDK基于J...
    Ten_Minutes阅读 8,974评论 1 27
  • 今天去广州看一个生病住院的朋友,这个朋友是老家的一个朋友。年纪比我大一岁,原来在老家的时候我们经常在一起玩,已经是...
    Maggielxx阅读 1,310评论 0 0

友情链接更多精彩内容