2009-08-07 13 views
1

Ich versuche, ein lineares System Solver PARDISO mit zu kompilieren. Der Testfall (pardiso_sym.c) wurde ebenfalls von derselben Webseite heruntergeladen.compilieren PARDISO lineare Solver Testfall mit GCC

Ich habe folgende Dateien im Verzeichnis:

[[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 

Dann versuche ich es mit dem folgenden Befehl zu kompilieren:

[[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 

Aber es gibt diesen Fehler:

/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 

Was ist falsch an meiner Kompilierungsmethode?

Dies ist die zusätzliche Informationen meines Systems:

[[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 

aktualisieren:

Die Bibliothek erkannt wird mit Vorschlag des Dave Gamble. Aber jetzt gibt es verschiedene Fehler:

$ 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' 

Antwort

2

EDIT: Ich lese die PARDISO Handbuch. Hier ist das Update:

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

Hier habe ich entfernt habe den „lib“ von Anfang an und der „.so“ vom Ende des -lpardiso_GNU_IA64

+0

@DG: Danke. Aber es gibt immer noch den gleichen Fehler. – neversaint

+0

@DG: Nochmals vielen Dank. Jetzt erkennt es die lib. Irgendeine Idee, was die mögliche Ursache eines neuen Fehlers ist (siehe Update)? – neversaint

2

EDIT: Für neue Fehler, die Sie benötigen - lg2c nach -lapack (Fortran-Kompatibilitätsbibliothek)

EDIT2: Fügen Sie auch -lgfortran und alles, was Sie sonst noch benötigen, hinzu. Das Suchen nach einem fehlenden Symbol findet normalerweise Erwähnungen der Bibliothek, die es enthält. Fügen Sie Bibliotheken einzeln hinzu, bis alle Abhängigkeiten erfüllt sind.

Also in Ihrem Fall Routine ist wie folgt:

verknüpft lapack - bekam ungelöst Symbol von G2C

hinzugefügt G2C - bekam Symbole von gfortran

gfortran hinzugefügt - bekam einige andere Symbole schau sie dir an und füge libs einzeln hinzu.

Libray Reihenfolge zählt, wenn Sie g2c vor lakak zum Beispiel, Linker wird wegwerfen alle seine Symbole, bevor es weiß, dass sie für lapak benötigt werden (MS Linker tut 2 Durchläufe, um das zu beheben). Wenn Sie also ein fehlendes Symbol sehen, das sich in einer Lib befindet, die Sie bereits enthalten, sehen Sie, welche Bibliothek es benötigt, und verschieben Sie die Lib mit dem Symbol dahinter.

+0

Wenn Sie die ls überprüfen, ist es in CWD und er ist -L. –

+0

@Eugene: Ich habe nichts installiert, ich habe nur diese "So" -Datei heruntergeladen. Von hier: http://pardiso-project.org/download/ab6ex6hze7cvjhuz04/ – neversaint

+1

Ja, das habe ich später gesehen :). Probieren Sie -L aus. ohne Platz. – Eugene