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

C'est ainsi que je compile lorsque les packages GSL sont installés. mais maintenant je travaille sur un serveur où je n'ai pas le droit d'installer GSL-Library. Quelles sont mes options?Problème de liaison g ++ avec GSL

thx

+0

Installez-le dans votre répertoire personnel et indiquez les chemins de liaison appropriés.Est-ce que ce n'est pas non plus une option? – DumbCoder

+0

@DumbCoder est juste, ma réponse est une procédure détaillée comment faire cela, vous pouvez installer beaucoup d'autres bibliothèques que vous pourriez avoir besoin comme ça. –

Répondre

10

je devais faire régulièrement, procédez comme suit:

  • Sur le serveur, créez un répertoire dans votre répertoire pour installer la bibliothèque (disons mypref) et un autre à Construire la bibliothèque (disons tmp). Vous avez deux nouveaux répertoires: ~/mypref et ~/tmp.
  • Télécharger les sources GSL ~/tmp (dernière version est ftp://ftp.gnu.org/gnu/gsl/gsl-1.14.tar.gz), extrait et aller dans le produit sous-répertoire (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

  • Lancez le script configure en spécifiant ~/mypref comme préfixe d'installation (et peut-être d'autres options en fonction de votre serveur):

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

  • Marque:

make

  • et installons:

make install

  • Maintenant, vous pouvez supprimer en toute sécurité le répertoire ~/tmp:

cd; rm -rf tmp

Maintenant, vous pouvez compiler votre programme en utilisant:

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

-I et -L indiquent respectivement le chemin des en-têtes et de la bibliothèque. Si votre programme est destiné à être exécuté dans un contexte où votre répertoire personnel n'est pas visible, envisager la liaison statique:

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

Le binaire produit par la dernière commande est plus grande que précédemment, mais entièrement indépendant de GSL et GSLCBLAS.

+0

c'est la réponse que j'attendais! Merci pour votre temps mec !!! – JavaHater

+0

vous êtes les bienvenus :-) –