Undefined reference (ScaLAPACK, Fortran)
-
Hi.
Ich versuche momentan ein Fortran Programm, das ScaLAPACK nutzt, zu kompilieren und zu linken. ScaLAPACK habe ich selbst kompiliert. Beim Fortran Programm handelt sich zunächst einmal nur um ein kleines Testprogramm, das keinerlei Funktion hat und nur kompilierbar und linkbar sein soll:
program test !call a blacs routine CALL BLACS_PINFO(1,1) CALL pzhegvx(1,'V','I','U',1,1.0,1,1,(/1,1/),1.0) end
Ich starte den Compiler mit
mpifort -lscalapack -o testScalapack test_SCALAPACK.f90
libscalapack.so ist hierbei in /usr/local/lib.
Das Resultat dieses Aufrufs ist:
gregor@...:~/test$ mpifort -lscalapack -o testScalapack test_SCALAPACK.f90 /tmp/cckS1inG.o: In function `MAIN__': test_SCALAPACK.f90:(.text+0x1c): undefined reference to `blacs_pinfo_' test_SCALAPACK.f90:(.text+0xaa): undefined reference to `pzhegvx_' collect2: error: ld returned 1 exit status
Jetzt habe ich mal mit nm nachgeguckt, ob in der libscalapack.so die Routinen zu finden sind. Das Resultat ist:
gregor@...:/usr/local/lib$ nm libscalapack.so | grep blacs_pinfo 000000000002826e T blacs_pinfo_ 0000000000038b47 T Cblacs_pinfo gregor@...:/usr/local/lib$ nm libscalapack.so | grep pzhegvx 0000000000526ef9 T pzhegvx_
Wenn ich das richtig interpretiere, scheinen die Routinen in der Bibliothek also durchaus vorhanden zu sein.
Hat einer eine Idee, was ich falsch mache oder was ich machen könnte, um dem Problem auf die Spur zu kommen? Oder wie ich ScaLAPACK problemlos zum Laufen kriege?
-
Zur Info:
Ich hatte hier eine Trivialitaet falsch gemacht. Die -l... Optionen fuer den Linker muessen ans Ende der Zeile und nicht an den Ort, an dem ich sie stehen hatte.