2015-04-22 128 views
0

我剛剛開始使用libspatialindex。我運行了指示安裝在http://libspatialindex.github.io/install.html,它使用以下命令在Ubuntu上安裝好(除了我找不到它提到的autogen.sh)。在C++中未定義對libspatialindex函數的引用

./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 
+0

您是否包含spatialindex命名空間? – itachi

+1

錯誤表示鏈接程序找不到相應的代碼。請嘗試更改順序: g ++ spatial.cpp -lspatialindex -o spatial 我對單行編譯和鏈接不是很有信心。我總是使用兩遍:首先編譯,然後鏈接對象與所需的庫。 –

+0

感謝您的建議@itachi,我嘗試添加命名空間SpatialIndex(我編輯了上面的問題也顯示了這一點),但仍然沒有運氣。我如何知道SIDX_Version中的名稱空間?從文檔http://libspatialindex.github.io/doxygen/sidx__api_8h.html – Patrick64

回答

1

問題是關於鏈接階段。該庫是正確的,因爲編譯器不會引發這種情況的警報(我現在只是做了一個測試)。 用於檢查您所使用的庫符號存在做

> nm libspatialindex |grep SIDX_Version 

。可能是libspatialindex_c呢?

+1

謝謝,我試過'gcc -g spatial.c -o spatial -lspatialindex',但是它給了我錯誤信息'在/usr/local/include/spatialindex/SpatialIndex.h:30:0, /usr來自/usr/local/include/spatialindex/capi/sidx_api.h:34, 的/local/include/spatialindex/capi/sidx_config.h:56, 。c:1: /usr/local/include/spatialindex/tools/Tools.h:59:20:致命錯誤:iostream:沒有這樣的文件或目錄# – Patrick64

+0

我真的很困惑...你提到的例子是典型的c這就是「capi」所暗示的,但這些包括「使用類」。很抱歉,我稍後會刪除我的回覆。爲了檢查缺失的符號是否在這裏,讓我知道它是否在裏面,請在圖書館做一個nm。 –

+0

@ Patrick64你有一些像libspatialindex_c?我看到一個似乎鏈接到libspatialindex_c而不是libspatialindex的例子。 –

0

默認情況下,libspatialindex安裝目標爲/usr/local。你在調用./configure時沒有覆蓋它,所以這就是make install將安裝的東西。

編譯器知道要在/usr/local/include中尋找包含文件,所以編譯不是問題。但是,它不知道要在usr/local/lib中查找庫。一個簡單的解決方法是將其添加到您的鏈接步驟:

g++ -o spatial spatial.o -lspatialindex -lm -L/usr/local/lib 
+0

同樣的問題我很擔心,雖然該文件夾確實包含'libspatialindex.a'和類似的文件,所以也許有助於更接近解決方案。 – Patrick64