f2py 错误:未定义符号

5 投票
1 回答
3414 浏览
提问于 2025-04-17 04:32

我需要用 f2py 来封装一段简单的 Fortran90 代码。这个 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

然后我用下面的代码进行了封装:

f2py  -m test -c test.f90

但是当我在 Python 中导入它时,出现了一个错误提示:

In [2]: import test

错误信息是:

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

有没有什么办法可以解决这个问题?谢谢。

1 个回答

7

在函数gasdev中,你把ran2声明成了一个外部函数。但是因为你没有链接任何这样的函数,所以导入这个模块的时候会出错。

相反,你可以把gasdev中的ran2声明去掉,这样ran2的调用就会使用模块中ran2函数的明确接口,这样一切就能正常工作了。

撰写回答