C++ 中对 libspatialindex 函数的未定义引用
Undefined reference to libspatialindex functions in C++
我刚刚开始使用 libspatialindex。我 运行 通过 instructions to install 并使用以下命令在 ubuntu 上安装正常(除了我找不到它提到的 autogen.sh)。
./configure
make
sudo make install
然后我做了一个很简单的程序来测试如下(基于this)
#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
默认情况下,libspatialindex
安装目标是 /usr/local
。您在 ./configure
的调用中没有覆盖它,所以那是 make install
将安装东西的地方。
编译器知道在/usr/local/include
中查找包含文件,所以编译不是问题。然而,它不知道在 usr/local/lib
中查找库。一个简单的解决方法是将其添加到您的 link 步骤:
g++ -o spatial spatial.o -lspatialindex -lm -L/usr/local/lib
问题出在链接阶段。该库已正确找到,因为编译器不会抛出那种情况的警报(我现在刚刚进行了测试)。
做一个
> nm libspatialindex |grep SIDX_Version
用于检查您正在使用的库中是否存在符号。可能是 libspatialindex_c 而不是?
我刚刚开始使用 libspatialindex。我 运行 通过 instructions to install 并使用以下命令在 ubuntu 上安装正常(除了我找不到它提到的 autogen.sh)。
./configure
make
sudo make install
然后我做了一个很简单的程序来测试如下(基于this)
#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
默认情况下,libspatialindex
安装目标是 /usr/local
。您在 ./configure
的调用中没有覆盖它,所以那是 make install
将安装东西的地方。
编译器知道在/usr/local/include
中查找包含文件,所以编译不是问题。然而,它不知道在 usr/local/lib
中查找库。一个简单的解决方法是将其添加到您的 link 步骤:
g++ -o spatial spatial.o -lspatialindex -lm -L/usr/local/lib
问题出在链接阶段。该库已正确找到,因为编译器不会抛出那种情况的警报(我现在刚刚进行了测试)。 做一个
> nm libspatialindex |grep SIDX_Version
用于检查您正在使用的库中是否存在符号。可能是 libspatialindex_c 而不是?