2010-12-17 98 views
2
g++ -o program main.cpp classOne.cpp classTwo.cpp -lgsl -lgslblas -lm 

這就是我安裝GSL包時的編譯方式。 但現在我正在一臺服務器上工作,我無權安裝GSL-Library。 我有什麼選擇?g ++鏈接問題與GSL

THX

+0

將它安裝在您的主目錄中並給出正確的鏈接路徑。這也不是一個選擇? – DumbCoder 2010-12-17 13:53:54

+0

@DumbCoder是正確的,我的答案是一個詳細的過程如何做到這一點,你可以安裝很多其他庫,你可能需要這樣的。 – 2010-12-17 14:00:54

回答

10

我不得不經常爲此,執行如下:

  • 在服務器上,在你的home目錄來安裝庫中創建一個目錄(假設mypref),另一種以建立圖書館(假設tmp)。您有兩個新目錄:~/mypref~/tmp
  • 下載GSL來源~/tmp(最後一個版本是ftp://ftp.gnu.org/gnu/gsl/gsl-1.14.tar.gz),提取物和去所產生的子目錄(gsl-1.14):

cd ~/tmp
wget ftp://ftp.gnu.org/gnu/gsl/gsl-1.14.tar.gz
tar -xvzf gsl-1.14.tar.gz
cd gsl-1.14

  • 啓動指定的configure腳本3210作爲安裝前綴(可能取決於你的服務器的其它選項):

./configure --prefix=${HOME}/mypref

  • 品牌:

make

  • 安裝:

make install

  • 現在,您可以安全地刪除~/tmp目錄:

cd; rm -rf tmp

現在你可以使用編譯程序:

g++ -o program main.cpp classOne.cpp classTwo.cpp -I${HOME}/mypref/include -lm -L${HOME}/mypref/lib -lgsl -lgslcblas

-I-L分別指示標題和庫的路徑。如果你的程序是指在一個範圍內,其中主目錄是不可見的執行,考慮靜態鏈接:

g++ -o program main.cpp classOne.cpp classTwo.cpp ${HOME}/mypref/lib/libgsl.a ${HOME}/mypref/lib/libgslcblas.a -I${HOME}/mypref/include -lm

由最後一個命令生成的二進制是比以前更大,但是從GSL和完全獨立GSLCBLAS。

+0

這是我等待的答案! thx爲你的時間花花公子!!! – JavaHater 2010-12-17 14:45:49

+0

不客氣:-) – 2010-12-17 21:28:21