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
- Mantener los métodos Java llamados desde Android JNI
- Aplicación para Android con 2 librerías con jniLibs - bloquea la aplicación
- Uso de minizip con android ndk
- Llame a métodos de clase C ++ o funcione desde Java en android sin recrear clase / variable en cada llamada
- Creación de un archivo de encabezado para la clase de actividad de Android
- ADT v22.3.0-887826
- 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!
- Cómo convertir char a jstring en JNI?
- Cómo llamar a función Java desde c
- No se invoca el método Java cuando se llama desde pthread nativo
- Callback Listener en Unity - Cómo llamar al método de archivo de script desde UnityPlayerActivity en Android
- Cómo depurar una aplicación en Android con GDBSERVER?
- ¿Qué dispositivos Android admiten jni?
- Pasar el puntero de C a Java se convierte en NULL
- JNA para android
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.
- No se puede proporcionar sin un constructor @Inject o de un método @ Proporcionado-anotado
- Pasar de una vista de lista a una vista de cuadrícula