我正在爲一個類分級C和C++文件,並且此分配使用GSL庫。由於我的計算機沒有root權限,因此我的GSL庫安裝在我的主目錄中,因此我需要告訴編譯器和連接器在哪裏找到它。告訴ld在哪裏通過環境變量查找目錄
當我自己編寫程序時,這不是問題,因爲我只是將相應的-L和-I標誌添加到gcc。
但是當我編譯學生的文件時,我不想編輯他們的每一個makefile。相反,我想將適當的目錄放入環境變量中,以便它可以無縫地發生。
爲此,我已經導出與庫中的下列變量或包括地點: C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,LIBRARY_PATH和LD_LIBRARY_PATH
但是當我編譯一個學生的項目,
gcc -Wall -o MC_thread MC_thread.c -lgsl -lgslcblas -lpthread -lm
我收到以下錯誤:
/usr/bin/ld: cannot find -lgsl
collect2: ld returned 1 exit status
make: *** [all] Error 1
我正在使用gcc v 4.1.2。如果我使用gcc v 4.4,我實際上不會得到這個錯誤,但我不知道爲什麼。我的鏈接是:
ld -V
GNU ld version 2.17.50.0.6-12.el5 20061020.
嘗試man ld和man ld.so以查看他們使用的環境變量。 LD_LIBRARY_PATH可能工作。 – Eugene 2010-02-09 05:24:03
我認爲LD_LIBRARY_PATH只能被ld.so使用,而不能被ld使用。由於 這是一個編譯時錯誤,而不是運行時錯誤,我將 重點放在爲什麼LIBRARY_PATH不起作用。我會驗證兩件事, 庫文件是否具有正確的名稱,並且實際上是在gcc執行環境中定義的LIBRARY_PATH ? – 2010-02-13 10:21:40
嘗試使用'-v'選項運行gcc,並從輸出中發佈完整的ld 調用。 – 2010-02-13 10:27:37