2013-03-07 146 views
0

我想在網絡上構建一些軟件(即python模塊圖形工具,http://projects.skewed.de/graph-tool/)我沒有root權限。因此,我使用--prefix和--with-include標誌以及CPPFLAGS和LD_LIBRARY_PATH環境變量將所有依賴關係自己安裝在本地磁盤上。無法編譯錯誤「main找不到-lCGAL」,符號鏈接不是問題

這樣做後,我得到一個關於沒有找到我的依賴關係(即CGAL:http://www.cgal.org/)奇怪的錯誤。

配置腳本說:checking for main in -lCGAL... no和生成文件,打印編譯器警告數量龐大的後,將失敗,並/usr/bin/ld: cannot find -lCGAL

據推測,這意味着它根本無法找到安裝庫。幾乎所有其他發生這種情況的情況下,谷歌顯示,他們沒有正確設置庫的符號鏈接。這似乎是正確設置在這裏:

truffles:rlaplant[147] echo $LD_LIBRARY_PATH 
/local_mount/space/truffles/1/users/rlaplant/graphtool/parts/lib:/local_mount/space/truffles/1/users/rlaplant/graphtool/parts/ 
truffles:rlaplant[160] file parts/lib/libCGAL.so 
parts/lib/libCGAL.so: symbolic link to `libCGAL.so.10' 

我真的不知道什麼是錯的。也許我使用LD_LIBRARY_PATH的方式有問題嗎?

回答

0

我想我找出了我的問題是什麼。

儘管libCGAL.so是一個動態鏈接庫,但編譯腳本實際上在做的是將其視爲靜態庫。我不知道它能做到這一點,我認爲如果它是一個靜態鏈接庫,它不能動態鏈接,反之亦然(我認爲這在實踐中通常是真實的)。

我在這裏做的是設置LIBRARY_PATH,它尋找靜態庫,而不是LD_LIBRARY_PATH,它在運行/鏈接時查找動態鏈接庫。我相信如果配置腳本更好地寫入考慮到我在這裏嘗試使用有趣的前綴來做什麼,那麼這種區別將是沒有意義的,因爲那樣它就能夠使用-L標誌,並且就我而言可以說這適用於靜態和動態鏈接,但LD_LIBRARY_PATH環境變量不(但可能不是這樣)。