Error de F2py: símbolo indefinido
Pregunta
Necesito envolver un código simplemente FORTRAN90 con F2PY. El módulo fortran "test.f90" es
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
Y luego lo envuelvo con
f2py -m test -c test.f90
Pero cuando lo importo en Python
In [2]: import test
me impulsó con un error diciendo
ImportError: ./test.so: undefined symbol: ran2_
¿Alguna idea de cómo arreglarlo? Gracias.
Solución
En la función GASDEV declara Ran2 como una función externa. Como entonces, no vincule en ninguna función que importe el módulo fallará.
En su lugar, elimine la Declaración de Ran2 en Gasdev, en cuyo caso la llamada Ran2 usa la interfaz explícita para la función Ran2 en el módulo, y todo funciona.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow