我正在尝试使用NDK 5完整的C++ gnustl:
的CPLUSPLUS-SUPPORT.html状态:
NDK工具链支持C++异常,因为NDK r5,但是出于与先前版本的兼容性原因,默认情况下所有C++源都使用-fno-exceptions支持进行编译.
要启用它,请使用'-fexceptions'C++编译器标志.这可以通过将以下内容添加到Android.mk中的每个模块定义来完成:
Run Code Online (Sandbox Code Playgroud)LOCAL_CPPFLAGS += -fexceptions更简单地说,在Application.mk中添加一行,该设置将自动应用于所有项目的NDK模块:
Run Code Online (Sandbox Code Playgroud)APP_CPPFLAGS += -fexceptions
sources/cxx-stl/gnu-libstdc++/README 状态:
该目录包含GNU libstdc ++ - v3 C++标准模板库实现的头文件和预构建二进制文件.
这些是通过build/tools下的rebuild-all-prebuilt.sh脚本从工具链源生成的.
要使用它,请在Application.mk中将APP_STL定义为'gnustl_static'.有关详细信息,请参阅docs/CPLUSPLUS-SUPPORT.html.
此实现完全支持C++异常和RTTI.
但所有使用异常的尝试都失败了 另一种NDK存在于http://www.crystax.net/android/ndk-r4.php上.使用该NDK中的hello-jni示例不起作用.创建一个Application.xmlwith 后,NDK 5的编译工作正常
APP_STL := gnustl_static
Run Code Online (Sandbox Code Playgroud)
将APP_STL设置为gnustl_static也自动启用-frtti和-fexceptions.但它死于与我自己的实验相同的可怕死亡.
我已经设法得到一个崩溃的代码的最小例子:
try {
__android_log_write(ANDROID_LOG_DEBUG,"foobar","trhown!");
throw "Wrong object type.";
} catch (char* b) {
__android_log_write(ANDROID_LOG_DEBUG,"foobar","catched!");
}
Run Code Online (Sandbox Code Playgroud)
就是我失去了一些东西或者是在陈述README和CPLUSPLUS-SUPPORT.html只是简单的错误?