我正在尝试使用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
我不知道为什么会这样,谷歌也没有帮助。
感谢。
答案 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?