Domanda

Ho bisogno di avvolgere un codice semplice Fortran90 con f2py. Il modulo FORTRAN "test.f90" è

module util

contains

FUNCTION gasdev(idum)
implicit none
INTEGER(kind=4), intent(inout) :: idum
REAL(kind=8) :: gasdev, ran2
print*,idum
gasdev = ran2(idum)
return
END FUNCTION

FUNCTION ran2(idum)
implicit none
INTEGER(kind=4), intent(inout) :: idum
REAL(kind=8) :: ran2
print*,idum
ran2=2.D0
return
END FUNCTION
end module util

e poi avvolgerlo con

f2py  -m test -c test.f90

, ma quando ho importazione in python

In [2]: import test

che mi ha spinto con l'errore dicendo

ImportError: ./test.so: undefined symbol: ran2_

Tutte le idee su come risolvere il problema? Grazie.

È stato utile?

Soluzione

In funzione gasdev si dichiara ran2 come una funzione esterna. Come poi non collegare in alcun tale funzione importando il modulo fallirà.

Al contrario, rimuovere la dichiarazione di ran2 in gasdev, nel qual caso la chiamata ran2 utilizza l'interfaccia esplicita alla funzione ran2 nel modulo, e tutto funziona.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top