美文网首页
NDK r10d 升级 NDK r16b

NDK r10d 升级 NDK r16b

作者: w小强 | 来源:发表于2019-03-09 13:15 被阅读0次

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编译

相关文章

网友评论

      本文标题:NDK r10d 升级 NDK r16b

      本文链接:https://www.haomeiwen.com/subject/mufspqtx.html