studio ndk android c++ c++11

studio - android ndk location



Habilitar compatibilidad con C++ 11 en Android (4)

Con el último gradle-experimental-plugin 0.8.0-alpha4 agrega a tu aplicación / build.gradle :

model { android { ndk { moduleName "native" CFlags.add("-std=c11") // Enable C11 support ldLibs.add("log") } } }

¿Cómo integro C ++ 11 en Android?


En primer lugar, deberá asegurarse de que su cadena de herramientas sea "Cross GCC". Mientras que era el predeterminado en mi Linux, no estaba en mi MacOSX Lion.

Para hacer esto, vaya a Propiedades del proyecto> Compilación de C / C ++> Editor de cadena de herramientas . La " cadena de herramientas actual " debe establecerse en " Cross GCC ". Es posible que deba desmarcar la casilla " Mostrar cadenas de herramientas compatibles solamente ".

A continuación, agregue una opción a LOCAL_CFLAGS en Android.mk :

LOCAL_CFLAGS := -std=gnu++11

Ahora debemos informar a Eclipse sobre dónde encontrar los nuevos símbolos correspondientes (por ejemplo, "std :: unordered_map"). Haga clic con el botón derecho en "jni"> Propiedades> C / C ++ General -> Rutas y símbolos -> Símbolos -> GNU C ++ y agregue el siguiente símbolo (haciendo clic en "Agregar ..."):

Name: __GXX_EXPERIMENTAL_CXX0X__ Value:

(es decir, deje "Valor" en blanco)


Parece que la respuesta principal aquí incluye soporte experimental para C ++ 11, y C ++ 11 ya no es experimental.

Si está utilizando la línea de comandos de soporte NDK (uso IDEA community edition 13 para Java), esto es lo que tuve que poner en mi jni/Application.mk para obtener compatibilidad con C ++ 11 con API 19 (en OSX ML):

NDK_TOOLCHAIN_VERSION := 4.8 # APP_STL := stlport_shared --> does not seem to contain C++11 features APP_STL := gnustl_shared # Enable c++11 extentions in source code APP_CPPFLAGS += -std=c++11

Derivado de here y here .


También puede establecer esto en su archivo build.gradle si está usando el gradle-experimental-plugin :

android.ndk { moduleName = "hello-android-jni" stl = "stlport_shared" cppFlags.add("-std=c++11") }