写点什么

NDK 的 C++ 库支持

用户头像
Changing Lin
关注
发布于: 4 小时前
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 中添加如下代码

LOCAL_CPPFLAGS := -fexceptions
复制代码


发布于: 4 小时前阅读数: 5
用户头像

Changing Lin

关注

获得机遇的手段远超于固有常规之上~ 2020.04.29 加入

我能做的,就是调整好自己的精神状态,以最佳的面貌去面对那些未曾经历过得事情,对生活充满热情和希望。

评论

发布
暂无评论
NDK的C++ 库支持