Eclipse-CDT не удается найти символы stdlib в проекте NDK
Я пытаюсь написать простое приложение для Android, используя NDK и c++. В частности, я хотел бы использовать gnustdc++, включенный в новейшую версию NDK (r7). Библиотека JNI скомпилирована и отлично работает как C, но теперь, когда я пытаюсь представить C++, я столкнулся с некоторыми проблемами.
я добавил ${NDK_ROOT}/sources/cxx-stl/gnu-libstdc++/include/
к путям включения моего проекта и #includes
inline разрешены. Однако, пытаясь использовать любой класс STL (например,vector
) результаты в Symbol 'vector' could not be resolved
.
все стандартные символы C, импортированные из <stdlib.h>
и такая работа, пока я не попытаюсь заменить #include
С <cstdlib>
. Потом он выдает Function 'malloc' could not be resolved
и так далее.
как ни странно, добавление заголовков stlport (в ${NDK_ROOT}/sources/cxx-stl/stlport/stlport
) исправляет все мои вопросы. Однако я связываю в GNU C++, а не STLPort, так что это неудобное и неправильное "решение" в лучшем случае. Кажется странным,что эти заголовки будут работать, но другие не будут. Затмение не удается индексировать или разрешать заголовки GNU C++?
Android.МК
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libfoobar-jni
LOCAL_SRC_FILES := foobar.cpp
LOCAL_LDLIBS := -llog -lGLESv2
LOCAL_C_INCLUDES := sources/cxx-stl/gnu-libstdc++/include/
LOCAL_CFLAGS := -g -std=c99
include $(BUILD_SHARED_LIBRARY)
применение.МК
APP_STL := gnustl_shared
Edit: я настроил свой проект на основе:
http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/
3 ответов
прочитайте это, у него есть решение:
http://comments.gmane.org/gmane.comp.handhelds.android.ndk/14371
резюме, в случае, если ссылка когда-нибудь умрет, это:
это ошибка в объявлении модуля gnustl_shared. Извините за это, это будет исправлено в следующем выпуске.
Тем временем, вы можете вручную изменить $NDK/sources/cxx-stl/gnu-libstdc++/Android.mk
и замените строку, которая говорит:
LOCAL_EXPORT_LDLIBS := $(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libsupc++.a
С:
LOCAL_EXPORT_LDLIBS := $(call host-path,$(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libsupc++.a)
Я знаю, что это не идеальное решение, но, по крайней мере, это позволит вам нажать "выполнить" или "отладить" через Eclipse:
- щелкните правой кнопкой мыши на проекте Android c++ и выберите Свойства.
- В разделе C / C++ General нажмите "анализ кода"
- переключиться на "Использовать настройки проекта"
- переключите все ошибки, которые вы получаете из-за использования класса vector, чтобы быть "предупреждениями".
для меня, ошибки, которые мне нужно было переключить до сих пор являются:
- символ"не решен"
- "декларация участника не найдена"
- "недопустимый аргумент шаблона"
- "недопустимые аргументы"
- "метод не может быть решен"
Как я уже сказал, это не идеально, и вы можете пропустить реальные ошибки из-за этого, но вы все равно получите возможность обычно выбирать "перейти к объявлению" и некоторые возможности проверки синтаксиса, а также возможность запуска вашей программы. Шаг сборки ndk поймает любые реальные ошибки в любом случае, так что это действительно не огромная потеря. Честно говоря, я не уверен в источнике этой проблемы. Скорее всего, это ошибка затмения.
вне темы, но актуально: вы также можете использовать ndk-gdb через eclipse. Учебник находится в блоге, связанном с OP, но вот прямая ссылка в любом случае.
удачи!
Edit (followup):
с тех пор я нашел способ обойти эту проблему, по крайней мере на моей коробке. ОП сказал, что в том числе заголовки STLPORT работали на него. Поначалу это было не для меня. Мне пришлось уничтожить проект Eclipse и начать все заново (по какой-то причине он не позволил мне удалить некоторые определения). Добавление STLPORT исправило некоторые проблемы, но в ndk r7b я все еще получал странные ошибки (например, NULL не был определен даже после включения stddef). В итоге мне пришлось включить заголовки x86. Они должны в значительной степени перекрываться с arm, однако полезно иметь arm "сверху" в порядке включения.
Итак, если вы столкнулись с той же проблемой, что и я, добавьте
$NDK_DIR / платформы / android-14/arch-x86 / usr / include
в ваш список eclipse также входит.
У меня эта проблема возникла в windows из-за различных форматов пути в cygwin, моей предпочтительной оболочке windows, и которая использует псевдо-пути стиля unix, а не windows. Если у вас есть эта проблема, и у вас есть cygwin, плавающий на вашем пути, eclipse может использовать его. Измените пути в Properties>C General>пути и символы, чтобы быть cygwin стиль, а не стиль windows (/cygwin/c/Android.... а не C:\Android...) ... в любом случае, это сработало для меня.