启用exceptionC ++

我正在尝试为Android制作APP本机代码。 本机代码在cplusplus中。 每当我尝试制作,出现以下错误。

H236Plus.cpp:135:错误:禁用exception处理,使用-fexceptions启用

如何使用-fexceptions来启用exception处理,以及在哪里使用它?

Solutions Collecting From Web of "启用exceptionC ++"

您需要使用CrystaX的自定义NDK进行构build。 它具有完整的libstdc ++,RTTI和exception支持。 这通常是我知道的Android开发的最佳工具。

这取决于你使用的是什么运行时。 如果您没有使用系统运行时并正在使用ndk-build ,则可以将其中的任何一个添加到您的Android.mk文件中:

  • LOCAL_CPP_FEATURES + =exception(推荐)
  • LOCAL_CPPFLAGS + = -fexceptions

此外,您可以将下面的行添加到您的Application.mk文件:

  • APP_CPPFLAGS + = -fexceptions

在您的NDK文件夹的docs/CPLUSPLUS-SUPPORT.html中有更多信息

-fexception是一个编译器开关。 你如何使用它取决于你的编译器设置。 你使用什么编译器? IDE? 构build工具?

在编译器标志中添加你的Makefile中的-fexception。

与最新版本的Android Studio这是我的build.gradle看起来像:

 model { android { compileSdkVersion 23 buildToolsVersion "23.0.2" buildTypes { release { minifyEnabled false shrinkResources false proguardFiles.add(file("proguard-rules.txt")) signingConfig = $("android.signingConfigs.release") } } defaultConfig { applicationId "my.android.app" minSdkVersion.apiLevel 16 targetSdkVersion.apiLevel 23 versionCode 29 versionName "my.latest.version" } ndk { moduleName "jni-utils" ldLibs.add("log") cppFlags.add("-std=c++11") cppFlags.add("-fexceptions") stl "gnustl_static" } } android.signingConfigs { create("release") { storeFile "C:\\Android\\Git\\MyProject\\keystore\\keystoreCommon" storePassword "put you password here" keyAlias "put your alias here" keyPassword "put your password here" } } } 

我通过将cFlags“-fexceptions”添加到build.gradle脚本的ndk部分来解决这个问题,如下所示:

 ndk { ... cFlags "-fexceptions" } 

如果您使用的是ndk-build构build系统,请参考@Tundebabzy的回答。

对于CMake构build系统

将以下内容添加到您的模块级build.gradle文件中:

 android { ... defaultConfig { ... externalNativeBuild { // For ndk-build, instead use ndkBuild {} cmake { // Enables exception-handling support. cppFlags "-fexceptions" } } } } ... 

有关更多信息,请参阅此链接 。