Вопрос

Мне нужно обернуть простой код fortran90 с помощью f2py.Модуль Фортрана "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

а затем я оборачиваю его

f2py  -m test -c test.f90

но когда я импортирую его в Python

In [2]: import test

это подсказало мне ошибку, говоря

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

Есть идеи, как это исправить?Спасибо.

Это было полезно?

Решение

В функции gasdev вы объявляете ran2 как внешнюю функцию.Поскольку вы тогда не привязываете какую-либо подобную функцию, импорт модуля завершится неудачно.

Вместо этого удалите объявление ran2 в gasdev, и в этом случае вызов ran2 использует явный интерфейс к функции ran2 в модуле, и все работает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top