启用异常 C++

发布于 2024-09-09 08:49:21 字数 194 浏览 5 评论 0原文

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

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

如何使用 -fexceptions 启用异常处理,在哪里使用它?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

笑叹一世浮沉 2024-09-16 08:49:21

这取决于您使用的运行时。如果您不使用系统运行时并使用 ndk-build 进行构建,则可以将以下任意内容添加到您的 Android.mk 文件中:

  • LOCAL_CPP_FEATURES += 异常(推荐)
  • LOCAL_CPPFLAGS += -fexceptions

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

  • APP_CPPFLAGS += -fexceptions

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

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

℡寂寞咖啡 2024-09-16 08:49:21

您需要使用 CrystaX 的自定义 NDK 进行构建。它具有完整的 libstdc++、RTTI 和异常支持。它通常是我所知道的最好的 Android 开发工具。

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.

2024-09-16 08:49:21

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

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

把回忆走一遍 2024-09-16 08:49:21

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

In the compiler flags add -fexception in your Makefile.

云仙小弟 2024-09-16 08:49:21

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

对于CMake构建系统

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

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

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

了解更多信息请参阅此链接

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.

新人笑 2024-09-16 08:49:21

使用最新版本的 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"
        }
    }
}

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"
        }
    }
}
牵你的手,一向走下去 2024-09-16 08:49:21

对于任何已经开始使用 NDK 示例的人来说,只是一个注释。

他们倾向于在 CMakeLists.txt 中设置 -fno-exceptions,您需要将其删除:

set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -Wall -Werror -fno-exceptions -frtti") 

您可能需要检查是否需要 -Werror

Just a note for anyone who has started with one of the NDK examples.

They tend to set -fno-exceptions in their CMakeLists.txt, you need to remove it:

set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -Wall -Werror -fno-exceptions -frtti") 

You might want to check whether you want -Werror while you're at it.

七堇年 2024-09-16 08:49:21

我通过在 applib 中的 build.gradle 脚本的 ndk 部分添加 cFlags "-fexceptions" 解决了这个问题> 文件夹,如下所示:

ndk {
    ...
    cFlags "-fexceptions"
}

更新:使用较新的 Gradle 插件,它会进入 externalNativeBuild/cmake 部分,如下所示:

android {
    compileSdkVersion 29

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 29

        externalNativeBuild {
            cmake {
                cppFlags.addAll(["-std=c++11", "-fexceptions", ...])
                ...
            }
        }
    }

...

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

ndk {
    ...
    cFlags "-fexceptions"
}

Update: with a newer Gradle plugin, it goes into externalNativeBuild/cmake section as follows:

android {
    compileSdkVersion 29

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 29

        externalNativeBuild {
            cmake {
                cppFlags.addAll(["-std=c++11", "-fexceptions", ...])
                ...
            }
        }
    }

...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文