这个错误意味着什么以及如何解决它?

时间:2011-08-25 06:08:43

标签: android c++ compiler-errors android-ndk android-stlport

我正在尝试使用Android中的NDK构建C ++代码。我有一个参数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

我不知道为什么会这样,谷歌也没有帮助。

感谢。

5 个答案:

答案 0 :(得分:1)

这是一个链接错误。您需要将APP_STL := stlport_static添加到Apllication.mk文件中。还要确保使用-fno-exceptions标志,因为STLport与C ++异常和RTTI不兼容。

您可以在APPLICATION-MK.HTML中获取更多信息,这些信息可在NDK的docs文件夹中获取。 CPLUSPLUS-SUPPORT.HTML也值得一读。

答案 1 :(得分:1)

我认为您在同一个项目中使用了两种不同的标准库实现。

看起来您正在使用D:/ android ...中标准库的stlport实现(标题)编译文件,并链接到本地​​库。

您必须在ide(或Makefile)中配置链接器以使用相同实现的lib文件(在D:/ android中的某个地方......我猜)。

答案 2 :(得分:0)

这看起来像链接器错误。您可能忘记将STL库引用添加到您的构建中。或者它无法找到

答案 3 :(得分:0)

你做到了吗?

#include <stdexcept>
#include <vector>
using namespace std;

答案 4 :(得分:0)

当我改变时

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

vector<float> firstPoint = coordinates[0];

它开始编译.....:s y?