2012-11-23 50 views
2

,使用下面的配置標誌:安裝的libcurl和非root用戶:需要配置,其中代碼查找我已經成功地安裝了系統和非root用戶的libcurl libcurl.so.4

./configure --prefix=/path/to/lib --exec-prefix=/path/to/lib --bindir=/path/to/lib 

一切正常運行編譯如下:

gcc -I/path/to/include -L/path/to/lib/ client.c -lcurl -o client 

問題是當我嘗試運行產生的程序。我得到以下錯誤:

client: error while loading shared libraries: libcurl.so.4: cannot open shared object file: No such file or directory 

我GOOGLE了一下週圍,發現它已經被報道(和拒絕)作爲一個bug here,但我仍然不清楚如何解決這個問題。按照響應中的建議使用ldconfig將需要root權限,這顯然沒有。

有什麼我可以做的,使這一切工作?看起來這應該很簡單,但如果是這樣,我完全錯過了它...

回答

2

如果你不想依靠一個環境變量,你可以使用rpath

gcc -I/path/to/include -L/path/to/lib/ client.c -lcurl -Wl,-rpath,/path/to/lib -o client 

這將在可執行硬編碼/path/to/lib使動態連接器將搜索.so那裏第一次。

(另請注意,在一般情況下,使用-rpath被認爲是不好的做法:如果RPATH目錄是任何一個人都比根別人寫的,它可能會導致安全問題)

+0

謝謝!爲此,這將會很好。 – Dan

1

設置LD_LIBRARY_PATH環境變量來動態地告訴你的程序去哪裏查找共享庫。在你的情況,與伯恩/ bash shell的,你可以這樣做:

$ LD_LIBRARY_PATH=/path/too/lib 
$ export LD_LIBRARY_PATH 
$ ./client 

更多信息請參見Shared libraries HOWTO。另請注意,通常情況下,您不應考慮LD_LIBRARY_PATH生產解決方案:您最終希望讓您的系統管理員配置系統加載路徑或將庫安裝在正確的位置。

+0

我希望我能把你們兩個都標爲正確的答案。 rpath選項最終成爲這個特定問題的最佳選擇,但知道我可以使用env變量來做同樣的事情是很好的。 – Dan

+1

我完全忘了'rpath'! @Schnouki有正確的解決方案,你標誌着正確的解決方案。 :-) – ckhan

相關問題