Estoy tratando de utilizar el NDK 5 completa C++ gnustl:Android NDK R5 y el apoyo de C++ excepción
Los CPLUSPLUS-SUPPORT.html
estados:
La cadena de herramientas NDK es compatible con excepciones de C++, ya que NDK R5, sin embargo todos Las fuentes de C++ se compilan con soporte -fno-exceptions de forma predeterminada, para razones de compatibilidad con versiones anteriores.
Para habilitarlo, utilice el indicador del compilador C++ '-fexceptions'. Esto se puede hacer añadiendo lo siguiente a cada definición de módulo en su Android.mk:
LOCAL_CPPFLAGS += -fexceptions
Más simplemente, añadir una sola línea a su Application.mk, el ajuste se aplicará automáticamente a NDK todo de su proyecto módulos:
APP_CPPFLAGS += -fexceptions
sources/cxx-stl/gnu-libstdc++/README
estados:
Este directorio co contiene los encabezados y los binarios precompilados para la implementación de la biblioteca de plantillas estándar de GNU libstdC++ - v3 C++ .
Estos se generan a partir de las fuentes de toolchain mediante el script rebuild-all-prebuilt.sh en construcción/herramientas.
Para usarlo, defina APP_STL a 'gnustl_static' en su Application.mk. Consulte docs/CPLUSPLUS-SUPPORT.html para obtener más detalles.
Esta implementación es totalmente compatible con las excepciones C++ y RTTI.
Pero todos los intentos que utilizan excepciones fallan. Existe un NDK alternativo en http://www.crystax.net/android/ndk-r4.php. Usar el ejemplo de hello-jni de ese NDK no funciona. Compliation con NDK 5 obras después de la creación de un Application.xml
con
APP_STL := gnustl_static
Configuración APP_STL a gnustl_static
también permite automáticamente -frtti
y -fexceptions
. Pero muere la misma muerte horrible que mis propios experimentos.
he logrado obtener una mínima ejemplo de código que se estrellaba para mí:
try {
__android_log_write(ANDROID_LOG_DEBUG,"foobar","trhown!");
throw "Wrong object type.";
} catch (char* b) {
__android_log_write(ANDROID_LOG_DEBUG,"foobar","catched!");
}
Am me falta algo o es el estado en el README
y CPLUSPLUS-SUPPORT.html
simplemente mal?
No has dicho lo que su fracaso es, así que es difícil para ayudar; Excepciones, RTTI y static_gnustl funcionan para mí en NDK-r5. – grrussel
Agregué un ejemplo que falla. – plaisthos
Invoque el comando ndk_build con el argumento V = 1 y verá los comandos dados para compilar y vincular. ¿Estás seguro de que el bloqueo se debe a excepciones? – grrussel