相关疑难解决方法(0)

Android NDK R5和支持C++异常

我正在尝试使用NDK 5完整的C++ gnustl:

CPLUSPLUS-SUPPORT.html状态:

NDK工具链支持C++异常,因为NDK r5,但是出于与先前版本的兼容性原因,默认情况下所有C++源都使用-fno-exceptions支持进行编译.

要启用它,请使用'-fexceptions'C++编译器标志.这可以通过将以下内容添加到Android.mk中的每个模块定义来完成:

LOCAL_CPPFLAGS += -fexceptions
Run Code Online (Sandbox Code Playgroud)

更简单地说,在Application.mk中添加一行,该设置将自动应用于所有项目的NDK模块:

APP_CPPFLAGS += -fexceptions
Run Code Online (Sandbox Code Playgroud)

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)

就是我失去了一些东西或者是在陈述READMECPLUSPLUS-SUPPORT.html只是简单的错误?

c++ exception android-ndk

13
推荐指数
2
解决办法
2万
查看次数

标签 统计

android-ndk ×1

c++ ×1

exception ×1