Когда я пытаюсь включить какой-либо класс C ++, например вектор, в мой проект Android NDK (с использованием последней версии NDK r5b), я получаю сообщение об ошибке следующего вида ...
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
Другие люди, которые сообщили об этой проблеме в Интернете, заявили об успехе, добавив
APP_STL := stlport_static
в свой файл Application.mk. Я сделал это, а также попробовал все возможные значения для APP_STL. Я очистил проект, запустил ndk-build clean, удалил папки obj и libs, и все же, когда я компилирую, он не может найти векторный класс. Я работал над этим уже несколько недель (с момента выхода NDK r5) и был бы очень признателен, если бы у кого-нибудь был совет. Благодаря!
источник
X
\ arch-arm \ usr \ include -vector
действительно ли там?Ответы:
Возможно. Вот несколько пошаговых инструкций:
В $ PROJECT_DIR / jni / Application.mk :
Я пробовал использовать stlport_shared, но безуспешно. То же самое с libstdc ++.
В $ PROJECT_DIR / jni / Android.mk :
Здесь ничего особенного, но убедитесь, что ваши файлы имеют формат .cpp .
В $ 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
Единственное, что меня здесь укусило, это #ifdef __cplusplus.
Смотрите каталоги.
Для компиляции используйте
ndk-build clean && ndk-build
.источник
Android NDK: You might want to use $NDK/build/tools/build-stlport.sh
. ПРИМЕЧАНИЕ: это не сработало под cygwinЕсли вы используете Android studio и при компиляции с использованием ndk все еще видите сообщение «error: vector: No such file or directory» (или другие ошибки, связанные с stl), то это может вам помочь.
В своем проекте откройте файл build.gradle модуля (не build.grade вашего проекта, а тот, который предназначен для вашего модуля) и добавьте 'stl "stlport_shared"' в элемент ndk в defaultConfig.
Например:
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" } } }
источник
stlport_shared
и нетstlport_static
?Я использую Android Studio, и по состоянию на 19 января 2016 года это помогло мне. (Кажется, что-то меняется каждый год или около того)
Перейдите в: приложение -> Сценарии Gradle -> build.gradle (Модуль: приложение)
Затем под моделью {... android.ndk {... и добавьте строку: stl = "gnustl_shared"
Как это:
model { ... android.ndk { moduleName = "gl2jni" cppFlags.add("-Werror") ldLibs.addAll(["log", "GLESv2"]) stl = "gnustl_shared" // <-- this is the line that I added } ... }
источник
gnustl_shared
вместоgnustl_static
?fatal error: 'vector' file not found #include <vector>
ли какие-либо дополнительные действия после добавления stl = "gnustl_static" или "gnustl_shared" в файл gradle модуля?Даже Себастьян дал хороший ответ там еще 3 года назад, я все же хотел бы поделиться здесь новым опытом, на случай, если вы столкнетесь с той же проблемой, что и я, в новой версии ndk.
У меня есть ошибка компиляции, например:
fatal error: map: No such file or directory fatal error: vector: No such file or directory
Моя среда - android-ndk-r9d и adt-bundle-linux-x86_64-20140702. Я добавляю файл Application.mk в ту же папку jni и вставляю одну (и только одну) строку:
Но, к сожалению, мою проблему это не решает! Мне нужно добавить эти 3 строки в Android.mk, чтобы решить эту проблему:
Отсюда я увидел хороший обмен, в котором говорится, что «предпочтительнее 'stlport_shared'». Так что, возможно, лучше использовать stlport в качестве разделяемой библиотеки вместо статической. Просто добавьте следующие строки в Android.mk и не нужно добавлять файл Application.mk.
Надеюсь, это будет полезно.
источник
Позвольте мне добавить немного к ответу Себастьяна Рота.
Ваш проект можно скомпилировать с помощью
ndk-build
командной строки после добавления кода, опубликованного Себастьяном. Но что касается меня, в Eclipse были синтаксические ошибки, и у меня не было автозавершения кода.Обратите внимание, что ваш проект необходимо преобразовать в проект C / C ++.
Как преобразовать проект C / C ++
Чтобы решить эту проблему, щелкните свой проект правой кнопкой мыши и выберите Свойства.
Выберите C / C ++ General -> Paths and Symbols и включите каталог
${ANDROID_NDK}/sources/cxx-stl/stlport/stlport
для включения.Нажмите Да, когда появится диалоговое окно.
До
После
Обновление # 1
GNU C. Добавить каталоги, перестроить. Там не будут какие - либо ошибки в C исходные файлы
GNU C ++. Добавляйте каталоги, перестраивайте. В исходных файлах CPP ошибок не будет .
источник
Если вы используете ndk r10c или новее, просто добавьте APP_STL = c ++ _ static в Application.mk
источник
Вот что вызвало проблему в моем случае (
CMakeLists.txt
):set (CMAKE_CXX_FLAGS "...some flags...")
Он делает невидимыми все ранее определенные каталоги include. После удаления / рефакторинга этой строки все работает нормально.
источник
В Android NDK перейдите в android-ndk-r9b> / sources / cxx-stl / gnu-libstdc ++ / 4.X / include в машинах linux
Я нашел решение по ссылке ниже http://osdir.com/ml/android-ndk/2011-09/msg00336.html
источник