Включить исключение C ++ - PullRequest
20 голосов
/ 10 июля 2010

Я пытаюсь сделать приложение нативный код для Android. Нативный код находится в cplusplus. Всякий раз, когда я пытаюсь сделать, появляется следующая ошибка.

H236Plus.cpp: 135: ошибка: обработка исключений отключена, используйте -fexceptions для включения

Как использовать -fexceptions для включения обработки исключений и где я могу его использовать?

Ответы [ 7 ]

27 голосов
/ 06 декабря 2013

Это зависит от того, какое время вы используете.Если вы не используете системную среду выполнения и строите с помощью ndk-build, добавьте в файл Android.mk любой из них:

  • LOCAL_CPP_FEATURES + = исключения (рекомендуется)
  • LOCAL_CPPFLAGS+ = -fexceptions

Кроме того, вы можете добавить следующую строку в файл Application.mk:

  • APP_CPPFLAGS + = -fexceptions

В вашей папке NDK есть больше информации docs/CPLUSPLUS-SUPPORT.html

5 голосов
/ 10 июля 2010

Вам нужно собрать с CrystaX custom NDK . Он имеет полную поддержку libstdc ++, RTTI и исключений. Как правило, это лучший инструмент для разработки Android, который я знаю.

4 голосов
/ 10 июля 2010

-fexception - это переключатель компилятора.Как вы его используете, зависит от настроек вашего компилятора.Какой компилятор вы используете?IDE?инструмент для сборки?

3 голосов
/ 10 июля 2010

В флагах компилятора добавьте -fexception в ваш Makefile.

2 голосов
/ 20 марта 2016

с последней версией 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"
        }
    }
}
1 голос
/ 19 сентября 2017

См. этот ответ @Tundebabzy, если вы используете ndk-build build build.

Для CMake Система сборки

добавить следующее в файл build.gradle уровня модуля:

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

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

Для получения дополнительной информации См. эту ссылку .

1 голос
/ 10 июля 2015

Я решил эту проблему, добавив cFlags "-fexceptions" в раздел ndk скрипта build.gradle, например:

ndk {
    ...
    cFlags "-fexceptions"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...