Immagino che questo sia un problema di noob standard ma dopo aver passato tutta la mattinata a cercare sul Web, ho deciso di infastidirti comunque. Sono su Mac OS 10.9 e mi piacerebbe chiamare una routine autovalore LAPACK da un programma Fortran. Ho avuto il piacere di essere stato presentato a Fortran proprio ieri, quindi scusami per eventuali errori folli.Collegamento di LAPACK in Fortran su Mac OS X
Questo è l'esempio minimo voglio arrivare a correre:
program eigtest
complex A(3,3)
real eigs(3)
A(1,1) = cmplx(1,0)
A(1,2) = cmplx(0,2)
A(1,3) = cmplx(3,0)
A(2,1) = cmplx(0,-2)
A(2,2) = cmplx(5,0)
A(2,3) = cmplx(1,-1)
A(3,1) = cmplx(3,0)
A(3,2) = cmplx(1,1)
A(3,3) = cmplx(7,0)
call heevd(A, eigs)
write(*,*) eigs
end
ho imparato che su OS X, LAPACK è parte del quadro Accelerate, così ho provato cose come:
gfortran -o eigtest -framework accelerate eigtest.f95
ma il linker si lamenta:
Undefined symbols for architecture x86_64:
"_heevd_", referenced from:
_MAIN__ in ccleuVFO.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
Il metodo mancante è quello di LAPACK. heevd calcola gli autovalori di una matrice hermitiana. Io _do_ uso gfortran come indicato nella domanda. Non ho problemi a compilare i programmi Fortran senza chiamate a LAPACK. Poiché OS X è a 64 bit, non penso che il problema sia che non è disponibile una versione a 64 bit. – Jonas
Sì, i documenti lo hanno chiarito. Penso che se LAPACK richiede che il metodo sia collegato, il tuo compito è trovare la libreria in cui vive e aggiungerla al tuo percorso di collegamento. – duffymo