Frage

Ich muss einen einfach fortran90 -Code mit F2Py einwickeln. Das FORTRAN -Modul "test.f90" ist

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

Und dann wickle ich es mit

f2py  -m test -c test.f90

Aber wenn ich es in Python importiere

In [2]: import test

Es veranlasste mich mit einem Fehler, der sagte

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

Irgendwelche Ideen, wie man es behebt? Vielen Dank.

War es hilfreich?

Lösung

In Funktion Gasdev deklarieren Sie Ran2 als externe Funktion. Da Sie dann in einer solchen Funktion, die das Modul importieren, nicht verknüpfen, schlägt dies fehl.

Entfernen Sie stattdessen die Deklaration von RAN2 in Gasdev. In diesem Fall verwendet der Ran2 -Anruf die explizite Schnittstelle zur RAN2 -Funktion im Modul und alles funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top