2010-07-10 15 views
19

Estoy tratando de hacer que el código nativo de la APLICACIÓN para Android. El código nativo está en cplusplus. Cada vez que intento hacer, aparece el siguiente error.Habilitar Excepción C++

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

¿Cómo se usan -fexceptions para habilitar el manejo de excepciones y dónde lo uso?

+0

Para habilitarlo con ndk-build, use la nueva variable LOCAL_CPP_FEATURES en su Android.mk, como en: LOCAL_CPP_FEATURES + = excepciones – hB0

Respuesta

5

Necesita construir con CrystaX's custom NDK. Tiene soporte completo de libstdC++, RTTI y excepciones. En general, es la mejor herramienta para el desarrollo de Android que conozco.

4

-fexception es un conmutador del compilador. Cómo lo usa depende de la configuración de su compilador. Qué compilador estas usando? IDE? herramienta de construcción?

+0

NDK con cygwin. Todo lo que hice fue escribir "make APP = project" en cygwin en el directorio de la carpeta ndk. – Gidiyo

+0

Debe haber un Makefile en este directorio. Esto controla cómo se compila todo. Ese es el lugar para buscar los modificadores del compilador. – EricSchaefer

+0

¿Es ** - fexception ** o ** - fexceptions **? –

3

En los indicadores del compilador, agregue -fexception en su Makefile.

+0

¿Eso funcionó alguna vez? Con esto tendrás -fno-excepciones junto con -fexcepciones. – ognian

+0

Seguramente tiene que eliminar las -fno-excepciones para que las -fexcepciones entren en vigor? – marienke

26

Depende de qué tiempo de ejecución está utilizando. Si no está utilizando el tiempo de ejecución del sistema y está construyendo con ndk-build, se agrega cualquiera de estos para su archivo Android.mk:

  • LOCAL_CPP_FEATURES + = excepciones (Recomendado)
  • LOCAL_CPPFLAGS + = -fexceptions

Además, se puede añadir la siguiente línea a su archivo Application.mk:

  • APP_CPPFLAGS + = -fexceptions

Hay más información en docs/CPLUSPLUS-SUPPORT.html en la carpeta de NDK

1

He resuelto este problema mediante la adición de cflags "-fexceptions" en la sección de escritura de NDK build.gradle, así:

ndk { 
    ... 
    cFlags "-fexceptions" 
} 
2

con la última versión de Android Studio esto es lo que mi build.gradle se ve así:

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

Refer this respuesta por @Tundebabzy si está usando el sistema de compilación ndk-build.

Para el sistema de acumulación CMake

añadir lo siguiente a su nivel de módulo build.gradle archivo:

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

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

Para obtener más información Ver this Link.

Cuestiones relacionadas