我刚刚开始使用libspatialindex。我仔细阅读了在http://libspatialindex.github.io/install.html处进行安装的说明,并使用以下命令在ubuntu上安装了ok(除非我找不到它提到的autogen.sh)。

./configure
make
sudo make install


然后我做了一个非常简单的程序来测试它,如下所示(基于https://github.com/libspatialindex/libspatialindex/wiki/Simple-Tutorial

#include <spatialindex/capi/sidx_api.h>
using namespace SpatialIndex;
int main(int argc, char* argv[])
{
    char* pszVersion = SIDX_Version();
}


并编译如下:

g++ -lspatialindex spatial.cpp -o spatial


它给了我错误:

/tmp/ccACK3p4.o: In function `main':
spatial.cpp:(.text+0xa): undefined reference to `SIDX_Version'
collect2: ld returned 1 exit status


我尝试了许多不同的操作,例如改用cmake并将其安装在其他文件夹中,但是没有运气。有任何想法吗?

编辑:

在上面添加了名称空间SpatialIndex,我也尝试了以下操作,但还是不走运:

g++ -c -o spatial.o spatial.cpp
g++ -o spatial spatial.o -lspatialindex -lm

最佳答案

问题在于链接阶段。正确找到该库是因为编译器不会引发这种情况的警报(我现在进行了测试)。
做一个

> nm libspatialindex |grep SIDX_Version


用于检查您所使用的库中符号的存在。可能是libspatialindex_c吗?

关于c++ - 对C++中的libspatialindex函数的 undefined reference ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29806367/

10-10 07:22