2009-08-07 5 views
1

J'essaie de compiler un solveur de système linéaire en utilisant PARDISO. Le cas de test (pardiso_sym.c) également téléchargé à partir du même site Web ci-dessus.Compilation du cas de test du solveur linéaire PARDISO avec GCC

je les fichiers suivants dans le répertoire:

[[email protected] my-pardiso]$ ls -lh 
total 1.3M 
-rw-r--r-- 1 gv hgc0746 1.3M Aug 7 11:59 libpardiso_GNU_IA64.so 
-rw-r--r-- 1 gv hgc0746 7.2K Nov 13 2007 pardiso_sym.c 

Ensuite, j'essaie de le compiler avec la commande suivante:

[[email protected] my-pardiso]$ gcc pardiso_sym.c -o pardiso_sym -L . -llibpardiso_GNU_IA64.so -L/home/gv/.boost/include/boost-1_38 -llapack 

Mais il donne cette erreur:

/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.3.2/../../../../x86_64-unknown-linux-gnu/bin/ld: 
cannot find -llibpardiso_GNU_IA64.so 
collect2: ld returned 1 exit status 

Quel est le problème avec ma méthode de compilation?

Voici l'info supplémentaire de mon système:

[[email protected] my-pardiso]$ uname -a 
Linux gw05 2.6.18-92.1.13.el5 #1 SMP Wed Sep 24 19:32:05 EDT 2008 
x86_64 x86_64 x86_64 GNU/Linux 

[[email protected] my-pardiso]$ gcc --version 
gcc (GCC) 4.3.2 

Mise à jour:

La bibliothèque est reconnue en utilisant la suggestion de Dave Gamble. Mais maintenant, il donne autre erreur :

$ gcc pardiso_sym.c -o pardiso_sym -L . -lpardiso_GNU_IA64 -L/home/gv/.boost/include/boost-1_38 -llapack 
./libpardiso_GNU_IA64.so: undefined reference to `s_stop' 
./libpardiso_GNU_IA64.so: undefined reference to `s_wsfe' 
./libpardiso_GNU_IA64.so: undefined reference to `e_wsfe' 
./libpardiso_GNU_IA64.so: undefined reference to `z_abs' 
./libpardiso_GNU_IA64.so: undefined reference to `s_cat' 
./libpardiso_GNU_IA64.so: undefined reference to `s_copy' 
./libpardiso_GNU_IA64.so: undefined reference to `do_fio' 

Répondre

2

EDIT: Je lis le manuel de pardiso. Voici la solution:

gcc pardiso_sym.c -o pardiso_sym -L . -lpardiso_GNU_IA64 -L/home/gv/.boost/include/boost-1_38 -llapack 

Ici, j'ai enlevé le « lib » depuis le début et la « .so » de la fin de -lpardiso_GNU_IA64

+0

@DG: Merci. Mais il donne toujours la même erreur. – neversaint

+0

@DG: Merci encore. Maintenant, il reconnaît la lib. Une idée quelle est la cause possible de la nouvelle erreur (voir mise à jour)? – neversaint

2

EDIT: Pour nouvelles erreurs dont vous aurez besoin - lg2c after -lapack (bibliothèque de compatibilité fortran)

EDIT2: Ajoutez également -lforforg et tout ce dont vous pourriez avoir besoin. Google pour un symbole manquant trouve généralement des mentions de la bibliothèque qu'il contient. Continuez à ajouter les bibliothèques une par une jusqu'à ce que toutes les dépendances soient satisfaites.

Donc, dans votre routine de cas est comme ceci:

liée LAPACK - obtenu symbole non résolu de G2C

ajouté G2C - GOT symboles de gfortran

ajouté gfortran - a obtenu d'autres symboles , cherchez-les et ajoutez les bibliothèques une par une. L'ordre de la librairie est important, si vous incluez g2c avant lapak par exemple, linker jettera tous ses symboles avant de savoir qu'ils sont nécessaires pour lapak (MS linker fait 2 passes pour réparer cela). Donc, si vous voyez un symbole manquant dans une lib que vous avez déjà inclus, regardez quelle bibliothèque en a besoin et déplacez la lib avec le symbole qui la suit.

+0

Si vous vérifiez le ls, il est dans CWD et il est -L. –

+0

@Eugene: Je n'ai rien installé Je viens de télécharger ce fichier "so". D'ici: http://pardiso-project.org/download/ab6ex6hze7cvjhuz04/ – neversaint

+1

Ouais, je l'ai vu plus tard :). Essayez -L. sans un espace cependant. – Eugene