android ndk 10d,NDK r10d 升级 NDK r16b

NDK 升级变化

一、 r10c

添加clang 3.5 的支持,NDK_TOOLCHAIN_VERSION=clang 会使用3.5版本的clang

弃用gcc 4.6 ,并且会在后续版本中移除gcc 4.6

已知问题:gcc 4.9编译时,使用-Os会导致崩溃

二、r10d

32 位ABI 默认使用4.8编译,64位ABI默认使用4.9编译

已经修复r10c 出现的指定-Os 出现的崩溃问题

三、r10e

添加clang3.6,默认使用clang3.6,移除clang3.4

移除gcc4.6

在ld.gold链接时,针对所有架构添加线程支持,默认不添加

要添加多线程编译,使用--threads

默认不实用多线程编译,--no-threads

四、r11

强烈建议使用clang,并且clang更新到3.8svn

已经弃用gcc,由clang替代,gcc 也不会在升级

已经移除gcc4.8,现在所有的gcc编译都使用4.9

已经将构建系统使用-isystem

向API21 添加Vulkan 支持

已知问题

1. x86 ASAN 目前无法运作

2. Clang、x86、stlport_static 与 -O0 以上优化级别的组合会导致 dynamic_cast 测试失败

3. 在ARM32 上使用c++_shared 时,异常处理会失效,根本原因在于,libc++abi 用于 ARM32 的 LLVM 展开程序与 libgcc 不兼容

五、r11b

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

六、r11c

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

七、r12

ndk-build 建议使用clang编译,在之后的版本中会移除gcc

已知问题

1. x86 AddressSanitizer 工具无法使用

2. c++_static 异常对android 9和14无效

3. RenderScript 工具不存在

八、r13b

gcc 不在支持, NDK_TOOLCHAIN_VERSION默认使用clang

因为gunstl 中有一部分和clang不兼容,以后可能会移除gunstl

九、 r14b

统一了头文件,以前每个Android版本都有自己的头文件,现在使用统一的头文件,默认未开启

gcc 被弃用,使用gcc,通过-D__ANDROID_API__=$API指定具体的API

十、r15c

不在支持Android2.3(android-9),现在最低的版本是android 4.0(android-14)

默认使用统一头文件

十一、r16b

弃用armeabi、MIPS、MIPS64的支持

弃用旧的头文件,使用统一头文件

十二、r17c

gnustl 和 stlport 已弃用

已移除对 ARMv5 (armeabi)、MIPS 和 MIPS64 的支持

十三、r18b

移除gcc

gnustl、gabi++ 和 stlport 已移除

对android 14和15的支持已经移除

升级过程

不能使用android-9,最低使用android-14

因为之前项目中已知使用gunstl,但是在后续版本中移除了gunstl,所以修改为c++_static和c++_shared

遇到的问题

头文件被移除问题的问题

通过deprecated-headers 兼容,但是注意,只能使用 gnustl 进行编译

gnustl_static 改为 c++_static 时,出现各种未知问题

导入了deprecated-headers,最后解决办法只能是删除deprecated-headers,并且修改所有被移除的头文件

引用的一部分库,使用的gcc 编译的

在r13b 以后,ndk-build默认使用clang,而且在r18b以后,删除了c++,所以引用的库也需要通过clang编译

你可能感兴趣的:(android,ndk,10d)