Что означает эта ошибка и как ее решить? - PullRequest
3 голосов
/ 25 августа 2011

Я пытаюсь построить код C ++, используя NDK в Android. У меня есть метод, который имеет параметр vector < vector <float> > coordinates

Все работает нормально, пока я не напишу эту строку в моем методе

vector<float> firstPoint = coordinates.at(0);

Я начинаю получать эту ошибку

D:/eclipseworkspace/myLibProject/obj/local/armeabi/libmyLibProject.a(FileName.o): In function `std::priv::_Vector_base<std::vector<float, std::allocator<float> >, std::allocator<std::vector<float, std::allocator<float> > > >::_M_throw_out_of_range() const':
D:/androidndk/sources/cxx-stl/stlport/stlport/stl/_vector.c:45: undefined reference to `std::__stl_throw_out_of_range(char const*)'
collect2: ld returned 1 exit status
make: *** [/cygdrive/d/eclipseworkspace/myLibProject/obj/local/armeabi/libOutputName.so] Error 1

Понятия не имею, почему это происходит, и Google тоже не помогает.

Спасибо.

Ответы [ 5 ]

1 голос
/ 25 августа 2011

Я думаю, что вы используете две разные реализации стандартной библиотеки в одном и том же проекте.

Похоже, вы компилируете свои файлы с (заголовками) реализацией stlport стандартной библиотеки в D:/ android ..., и вы ссылаетесь на вашу локальную библиотеку.

Вы должны настроить компоновщик в вашем ide (или Makefile), чтобы использовать также файл lib той же реализации (где-то в D: / android... Похоже).

1 голос
/ 25 августа 2011

Это ошибка связи. Вам нужно добавить APP_STL := stlport_static в ваш файл Apllication.mk. Также убедитесь, что вы используете флаг -fno-exceptions, поскольку STLport не совместим с исключениями C ++ и RTTI.

Вы можете получить дополнительную информацию в APPLICATION-MK.HTML, который доступен в папке docs в NDK. CPLUSPLUS-SUPPORT.HTML тоже стоит прочитать.

0 голосов
/ 25 августа 2011

Когда я изменился

vector<float> firstPoint = coordinates.at(0);

до

vector<float> firstPoint = coordinates[0];

он начал компилироваться .....: s y?

0 голосов
/ 25 августа 2011

Ты это сделал?

#include <stdexcept>
#include <vector>
using namespace std;
0 голосов
/ 25 августа 2011

это похоже на ошибку компоновщика. Возможно, вы забыли добавить ссылку на библиотеку STL в вашу сборку. Или это не может быть найдено

...