Cuando intento incluir cualquier clase de C ++ como vector en mi proyecto NDK de Android (usando NDK r5b, el último), aparece un error como el siguiente ...
Compile++ thumb : test-libstl <= test-libstl.cpp
/Users/nitrex88/Desktop/Programming/EclipseProjects/STLTest/jni/test-libstl.cpp:3:18: error: vector: No such file or directory
Otras personas que informaron sobre este problema en línea afirmaron haber tenido éxito al agregar
APP_STL := stlport_static
a su archivo Application.mk. He hecho esto y he probado todos los demás valores posibles para APP_STL. Limpié para proyectar, ejecuté ndk-build clean, eliminé las carpetas obj y libs, y aún cuando compilo no puedo encontrar la clase de vector. He estado trabajando en esto durante varias semanas (desde que salió NDK r5) y realmente agradecería si alguien tuviera algún consejo. ¡Gracias!
fuente
X
\ arch-arm \ usr \ include - ¿vector
realmente está ahí?Respuestas:
Es posible. Aquí hay algunos paso a paso:
En $ PROJECT_DIR / jni / Application.mk :
Intenté usar stlport_shared, pero no tuve suerte. Lo mismo con libstdc ++.
En $ PROJECT_DIR / jni / Android.mk :
Aquí no hay nada especial, pero asegúrese de que sus archivos sean .cpp .
En $ PROJECT_DIR / jni / hello-jni.cpp :
#include <string.h> #include <jni.h> #include <android/log.h> #include <iostream> #include <vector> #define LOG_TAG "hellojni" #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) #ifdef __cplusplus extern "C" { #endif // Comments omitted. void Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ) { std::vector<std::string> vec; // Go ahead and do some stuff with this vector of strings now. } #ifdef __cplusplus } #endif
Lo único que me mordió aquí fue #ifdef __cplusplus.
Mira los directorios.
Para compilar, use
ndk-build clean && ndk-build
.fuente
Android NDK: You might want to use $NDK/build/tools/build-stlport.sh
. NOTA: esto no funcionó con cygwinSi está utilizando Android Studio y sigue viendo el mensaje "error: vector: No existe tal archivo o directorio" (u otros errores relacionados con stl) cuando está compilando con ndk, entonces esto podría ayudarlo.
En su proyecto, abra el archivo build.gradle del módulo (no el build.grade de su proyecto, sino el que es para su módulo) y agregue 'stl "stlport_shared"' dentro del elemento ndk en defaultConfig.
Por ejemplo:
android { compileSdkVersion 21 buildToolsVersion "21.1.2" defaultConfig { applicationId "com.domain.app" minSdkVersion 15 targetSdkVersion 21 versionCode 1 versionName "1.0" ndk { moduleName "myModuleName" stl "stlport_shared" } } }
fuente
stlport_shared
y nostlport_static
?Estoy usando Android Studio y, a partir del 19 de enero de 2016, esto funcionó para mí. (Esto parece algo que cambia cada año aproximadamente)
Vaya a: aplicación -> Gradle Scripts -> build.gradle (Módulo: aplicación)
Luego, en el modelo {... android.ndk {... y agregue una línea: stl = "gnustl_shared"
Me gusta esto:
model { ... android.ndk { moduleName = "gl2jni" cppFlags.add("-Werror") ldLibs.addAll(["log", "GLESv2"]) stl = "gnustl_shared" // <-- this is the line that I added } ... }
fuente
gnustl_shared
lugar degnustl_static
?fatal error: 'vector' file not found #include <vector>
Aparece el error: ¿Se necesitan pasos adicionales después de agregar stl = "gnustl_static" o "gnustl_shared" al archivo gradle del módulo?Incluso Sebastian había dado una buena respuesta allí hace 3 años más, todavía me gustaría compartir una nueva experiencia aquí, en caso de que enfrente el mismo problema que yo en la nueva versión de ndk.
Tengo un error de compilación como:
fatal error: map: No such file or directory fatal error: vector: No such file or directory
Mi entorno es android-ndk-r9d y adt-bundle-linux-x86_64-20140702. Agrego el archivo Application.mk en la misma carpeta jni e inserto una (y solo una) línea:
Pero desafortunadamente, ¡no resuelve mi problema! Tengo que agregar estas 3 líneas en Android.mk para resolverlo:
Y vi un buen intercambio desde aquí que dice "se prefiere 'stlport_shared'". Entonces, tal vez sea una mejor solución usar stlport como una biblioteca compartida en lugar de estática. Simplemente agregue las siguientes líneas en Android.mk y luego no es necesario agregar el archivo Application.mk.
Espero que esto sea útil.
fuente
Permítanme agregar un poco a la respuesta de Sebastian Roth.
Su proyecto se puede compilar usando
ndk-build
en la línea de comando después de agregar el código que Sebastian había publicado. Pero en cuanto a mí, hubo errores de sintaxis en Eclipse y no completé el código.Tenga en cuenta que su proyecto debe convertirse a un proyecto C / C ++.
Cómo convertir un proyecto C / C ++
Para solucionar este problema, haga clic derecho en su proyecto, haga clic en Propiedades
Elija C / C ++ General -> Rutas y símbolos e incluya los directorios
${ANDROID_NDK}/sources/cxx-stl/stlport/stlport
para incluirHaga clic en Sí cuando aparezca un cuadro de diálogo.
antes de
Después
Actualización n. ° 1
GNU C. Agregar directorios, reconstruir. No habrá ningún error en C archivos de código fuente
GNU C ++. Agregue directorios, reconstruya. No habrá errores en los archivos fuente de CPP .
fuente
Si está utilizando ndk r10c o posterior, simplemente agregue APP_STL = c ++ _ static a Application.mk
fuente
Esto es lo que causó el problema en mi caso (
CMakeLists.txt
):set (CMAKE_CXX_FLAGS "...some flags...")
Hace invisibles todos los directorios de inclusión definidos anteriormente. Después de eliminar / refactorizar esta línea, todo funciona bien.
fuente
En Android NDK, vaya a android-ndk-r9b> / sources / cxx-stl / gnu-libstdc ++ / 4.X / include en máquinas Linux
Encontré una solución en el siguiente enlace http://osdir.com/ml/android-ndk/2011-09/msg00336.html
fuente