pla*_*hos 13 c++ exception android-ndk
我正在尝试使用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.xml
with 后,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
只是简单的错误?
事实证明,异常可以工作,但前提是异常是从std :: exception继承的.在我的例子中,异常层次结构并不总是包含std :: exception,它打破了catch/throw.奇怪的是,当为x86/Mac OS编译时,抛出的字符串作为例外工作.我通过修改我使用的例外来解决我的问题.
NDK-r5工具支持在C++代码中使用异常和RTTI.但是,在存在RTTI或异常的情况下,不支持使用除GNU STL之外的STL作为静态库.
提供的STLport不能与异常或RTTI一起使用.
请注意,在STL实现之间交换时可能需要清理构建对象.
归档时间: |
|
查看次数: |
22616 次 |
最近记录: |