Подтвердить что ты не робот

Включить исключение С++

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

  • APP_CPPFLAGS + = -fexceptions

Более подробная информация в docs/CPLUSPLUS-SUPPORT.html в папке NDK

Ответ 3

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

Ответ 4

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

Ответ 5

с последней версией 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"
        }
    }
}

Ответ 6

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

ndk {
    ...
    cFlags "-fexceptions"
}

Ответ 7

Обратитесь к this от @Tundebabzy, если вы используете систему сборки ndk-build.

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

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

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

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

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