Enable Exception C++

2019-02-08 01:10发布

问题:

I am trying to make APP native code for Android. The Native code is in cplusplus. Whenever I try to make, the following error appears.

H236Plus.cpp:135: error: exception handling disabled, use -fexceptions to enable

How do I use -fexceptions to enable exception handling, and where do i use it?

回答1:

You need to build with CrystaX's custom NDK. It has full libstdc++, RTTI and exceptions support. It's generally the best tool for Android development I know.



回答2:

It depends on what runtime you are using. If you are not using system runtime and are building with ndk-build, you add any of these to your Android.mk file:

  • LOCAL_CPP_FEATURES += exceptions (Recommended)
  • LOCAL_CPPFLAGS += -fexceptions

Also, you can add the following line to your Application.mk file:

  • APP_CPPFLAGS += -fexceptions

There's more information in docs/CPLUSPLUS-SUPPORT.html in your NDK folder



回答3:

-fexception is a compiler switch. How you use it depends on your compiler setup. What compiler are you using? IDE? build tool?



回答4:

In the compiler flags add -fexception in your Makefile.



回答5:

with the latest version of Android Studio this is what my build.gradle looks like:

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"
        }
    }
}


回答6:

I solved this problem by adding cFlags "-fexceptions" into ndk section of build.gradle script, like this:

ndk {
    ...
    cFlags "-fexceptions"
}


回答7:

Refer this answer by @Tundebabzy if you are using ndk-build build system.

For CMake build system

add the following to your module-level build.gradle file:

android {
  ...
  defaultConfig {
    ...
    externalNativeBuild {

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

For more information See this Link.