Configuración de C ++ 11 (std :: thread) para NDK con ADT / Eclipse

He estado intentando utilizar C ++ 11. Estoy desarrollando un proyecto android y quiero usar std :: mutex. Junto con OpenCV Pero no importa lo que hago, simplemente no puedo arreglar el Type 'mutex' could not be resolved error.

He intentado seguir los tutoriales que encontré en SO y otros lugares. LINK1 LINK2 LINK3 LINK4

  1. ADT v22.3.0-887826
  2. Los compiladores C / C ++ instalados (CDT)

Después de tantos tutoriales, se ha convertido en un verdadero desastre ahora. Así que voy a explicar mi configuración actual

  • Proyecto> Propiedades> C / C ++ Build> Editor de cadena de herramientas
    • La cadena de herramientas actual es "Cross GCC"
    • El constructor actual es "Android Builder"
  • Proyecto> Propiedades> C / C ++ Build> Opciones de descubrimiento

    • El comando de invocación del compilador es "gcc"
    • Los argumentos de invocación del compilador son -E -P -v -dD "$ {plugin_state_location} /specs.c -std = c ++ 11"
  • Proyecto> C / C ++ General> Rutas y símbolos> # pestaña Símbolos

    • Símbolo = __cplusplus y valor = 1

En mi archivo Application.mk tengo los siguientes

 APP_STL := gnustl_static APP_USE_CPP0X := true APP_CPPFLAGS := -std=c++11 -frtti -fexceptions APP_ABI := armeabi-v7a APP_PLATFORM := android-8 

Intenté cambiar el valor del símbolo cplusplus a 201103L y probé __GXX_EXPERIMENTAL_CXX0X con un valor vacío

Pero nada parece funcionar, ¿Qué estoy haciendo mal?

Cualquier ayuda es apreciada!

El soporte para std::thread es un poco especial. La cuestión se aborda, por ejemplo, en este artículo de Binglong . El artículo es muy corto, pero puede resumirse en una frase:

No puede usar la herramienta (por defecto) gcc 4.6 toolchain si desea #include <thread> o #include <mutex> .

Por lo tanto, agregue NDK_TOOLCHAIN_VERSION=4.8 o NDK_TOOLCHAIN_VERSION=clang a su Application.mk .

Para que ADT reconstruya correctamente su índice , vea la compilación de Android NDK, no se pudo resolver el método o Eclipse se compila correctamente, pero aún así se producen errores semánticos .

En Android.mk, agregue LOCAL_CPPFLAGS := -std=c++11 -D __cplusplus=201103L y reconstruya su proyecto (para reconfigurar el compilador). Después de reconstruir, su proyecto agrega automáticamente la ruta stl necesaria en Ruta y símbolos

Si actualiza el NDK o instala una nueva versión de Android Studio (2.1 al momento de escribirlo) y tiene Android Studio descargue el NDK para usted, obtendrá la revisión 12, que tiene muchos de los std :: define no definidos en \ ndk -bundle \ sources \ cxx-stl \ gnu-libstdc ++ \ 4.9 \ libs \ armeabi-v7a \ include \ bits \ c + + config.h – los relevantes para el subproceso que son tales como _GLIBCXX_HAS_GTHREADS que oculta la clase thread en "thread" ejemplo.

Dice que después de la revisión 10e que gcc está obsoleto. Y con esto todos los define como se mencionó – que completamente buggered nuestro código JNI dependiente del hilo.

Clang como se sugiere en otros puestos no es una solución para nosotros, ya que entre otras cosas parece no apoyar thead_local por ejemplo. La solución es volver a la revisión 10e – que puede encontrar en:

Dl.google.com/android/ndk

Extraiga el paquete y copie en el directorio sdk / ndk-bundle – asegúrese de borrar primero la revisión original 12.

  • Los símbolos se quitan cuando se construye código nativo usando Gradle
  • Técnica subyacente de FaceDetector de Android
  • Android JNI - Llamar AttachCurrentThread sin DetachCurrentThread
  • Compilación de Android JNI para OpenCV en Mac OSX
  • Android: Necesidad de crear un objeto Preferencias compartidas en c ++ NDK y almacenar algún valor booleano
  • Módulos anidados ndk de Android
  • Java.lang.UnsatisfiedLinkError: Método nativo no encontrado: Error en jni ()
  • C ++ y JNI - Cómo pasar una matriz en un jfloatArray
  • Cómo depurar código nativo en un proyecto de biblioteca de Android?
  • Android NDK: ¿Cómo limpiar el código nativo después de reiniciar la actividad?
  • Redireccionamiento de STDIN y STDOUT del programa C en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.