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.


Log in to reply