проблема с g ++ связыванием с GSL - PullRequest
2 голосов
/ 17 декабря 2010
g++ -o program main.cpp classOne.cpp classTwo.cpp -lgsl -lgslblas -lm

так я компилирую, когда установлены GSL-пакеты. но сейчас я работаю на сервере, где у меня нет прав на установку GSL-библиотеки. Какие у меня варианты?

ТНХ

1 Ответ

10 голосов
/ 17 декабря 2010

Мне приходилось делать это регулярно, выполните следующие действия:

  • На сервере создайте один каталог в вашем домашнем каталоге для установки библиотеки (скажем, 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, указав ~/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.

...