3

我正在尝试在 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

我不知道为什么会发生这种情况,谷歌也没有提供帮助。

谢谢。

4

5 回答 5

1

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

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

于 2011-08-25T06:25:46.720 回答
1

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

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

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

于 2011-08-25T06:26:46.457 回答
0

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

于 2011-08-25T06:18:47.213 回答
0

你做了这个了吗 ?

#include <stdexcept>
#include <vector>
using namespace std;
于 2011-08-25T06:19:03.627 回答
0

当我改变

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

vector<float> firstPoint = coordinates[0];

它开始编译.....:sy?

于 2011-08-25T07:09:46.273 回答