g ++与GSL的链接问题

时间:2010-12-17 13:25:06

标签: c++ hyperlink g++ gsl

g++ -o program main.cpp classOne.cpp classTwo.cpp -lgsl -lgslblas -lm

这是我安装GSL包时的编译方式。 但现在我正在服务器上,我无权安装GSL-Library。 我有什么选择?

THX

1 个答案:

答案 0 :(得分:10)

我必须经常这样做,如下:

  • 在服务器上,在主目录中创建一个目录以安装库(假设为mypref),另一个目录用于构建库(假设为tmp)。您有两个新目录:~/mypref~/tmp
  • ~/tmp下载GSL源代码(上一版本为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脚本,指定~/mypref作为安装前缀(可能还有其他选项,具体取决于您的服务器):

./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。