NDK 的 C++ 库支持
1.C++ 运行时库
1.1 libc++
LLVM 的 libc++ 是 C++ 标准库。CMake 默认设置为 C++ Clang 默认设置的版本(目前为 C++14),因此您需要将 CMakeLists.txt 中的标准 CMAKE_CXX_STANDARD 设置为适当的值,才能使用 C++17 或更高版本的功能。
ndk-build 默认情况下仍将此决定留给 Clang,因此 ndk-build 用户应使用 APP_CPPFLAGS 来添加 -std=c++17 或任何所需内容。
libc++ 的共享库为 libc++_shared.so,静态库为 libc++_static.a
1.2 system
system 运行时指的是 /system/lib/libstdc++.so。请勿将该库与 GNU 的全功能 libstdc++ 混淆。在 Android 系统中,libstdc++ 只是 new 和 delete。对于全功能 C++ 标准库,请使用 libc++。
1.3 none
另外,您还可选择不使用 STL
1.4 选择 C++ 运行时
CMake 的默认值为 c++_static。可以 build.gradle 文件中的 ANDROID_STL 变量指定
ndk-build 的默认值为 none。可以使用 Application.mk 文件中的 APP_STL 变量指定
clang++ 将默认使用 c++_shared。如需使用静态变体,请将 -static-libstdc++ 添加至链接器标志中。
2.注意事项
2.1 静态运行时
如果应用的所有原生代码均位于一个共享库中,我们建议使用静态运行时。这样可让链接器最大限度内联和精简未使用的代码,使应用达到最优化状态且文件最小巧。
一般情况下,只有在应用中有且只有一个共享库时,才能使用 C++ 运行时的静态变体。
2.2 共享运行时
如果应用包括多个共享库,应使用 libc++_shared.so。
2.3 每个应用一个 STL
3.异常
ndk-build 中启用异常的方法,可在 Android.mk 或 Application.mk 中添加如下代码
版权声明: 本文为 InfoQ 作者【Changing Lin】的原创文章。
原文链接:【http://xie.infoq.cn/article/778e0bce334ae984b973940e2】。文章转载请联系作者。
评论