Исправление ошибок Eclipse при использовании Android NDK и std::vector
Я использую eclipse для разработки приложения для Android, которое также использует ndk. я векторы в моем приложении, и я сделал необходимые вещи, чтобы получить их, включив
APP_STL: = stlport_static
В моем приложении Application.mk
Все работает нормально, компилируется и запускается, но Eclipse продолжает давать мне ошибки, когда я использую векторы
std::vector<int> blah
например, создает ошибку. Если я удалю ошибку и продолжаю ее компилировать и работать нормально.
Я добавил
$ {NDKROOT}/источники/CXX-СТЛ/гну-libstdС++/включить
В моей конфигурации проекта в разделе С++ Общие → Контуры и символы → включить
Он разрешает #include <vector>
штраф (до того, как я добавил путь выше, у меня была ошибка для этого), но я все еще получаю ошибки с использованием векторов.
Как я могу заставить eclipse перестать давать мне ошибки для этого?
EDIT:
пример ошибки: Symbol 'vector' could not be resolved
ИЗМЕНИТЬ 2:
Я попытался добавить
using namespace std;
а затем с использованием векторного blah и вызывает другую ошибку:
Недопустимые аргументы шаблона
Ответы
Ответ 1
Я добавил ${NDKROOT}/sources/cxx-stl/gnu-libstdС++/include
В моей конфигурации проекта в разделе С++ Общие → Контуры и символы → включить
Да, это так. Я попытался добавить то же самое с тем же результатом.
Однако, если вы добавляете заголовки stl_port
${NDKROOT}/sources/cxx-stl/stlport/stlport
Это будет трюк. Конечно, нет необходимости менять
APP_STL := stlport_static
поскольку он работает только в индексах eclipse. Это будет полезно, пока вы не собираетесь использовать что-то, что существует в gnu-libstdС++, и не существует stl-порта.
Ответ 2
Blockquote
Я подаю иск в eclipse indigo rc2.
Я добавил следующую строку в Android.mk
LOCAL_C_INCLUDES += ${NDKROOT}/sources/cxx-stl/stlport/stlport
и добавлена следующая строка в Application.mk
APP_STL := stlport_static
то автоматически мой путь ndk stlport добавлен в
Свойства → С++ Общие → Контуры и символы → включить
Удачи! ^^
Ответ 3
Сначала мы встретили ту же проблему с картой и попытались добавить "Пути и символы", как было предложено, однако это все равно не сработает.
Позже вместо
#include <map>
мы использовали
#include <stl/_map.h>
Ошибка исчезла, а затем мы вернулись к include <map>
. Eclipse больше не жаловался, что "Символ не может быть разрешен".
Кажется, что eclipse имеет кэш, и каким-то образом он может быть запутан, если вы специально не указали ему нужное место для поиска символов.
Ответ 4
Я не знаю, на какой стадии он работал, но:
-
Добавить в Application.mk APP_STL := gnustl_static
-
Добавить include в свойства проекта → C/С++ Общие → Пути и символы - 'NDK root path'/'your directory to android platform'/arch-arm/usr/include
'NDK root path'/sources/cxx-stl/gnu-libstdc++/4.9/include
'NDK root path'/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include/bits
-
Отключите все предупреждения в свойствах проекта- > С++ General- > Code Analisis.
- Свойства проекта- > С++ Build- > Builder Settings → Снимите флажок в команде по умолчанию. Создать команду set empty.
- Далее сконфигурируйте NDK Builder: Свойства проекта → Строители- > Создать- > Имя программы и заполнить имя (ваше имя построение conf), Местоположение (путь к корневому каталогу NDK), Рабочий каталог (путь к директории проекта). → Обновить и проверить определенные ресурсы (ваша папка libs в проекте). → Проверка параметров сборки. Укажите рабочий набор соответствующих ресурсов и измените папку "jni" с вашим источником.
работал в Ubuntu 15.04. Eclipse 3.8.1. Android NDK r10e.