使用f2py和LAPACK从模块内部调用

时间:2014-10-09 16:02:50

标签: python fortran fortran90 f2py

我试图通过编写以下命令来使用f2py包装FORTRAN90代码

gfortran -c nrt.f90
gfortran -c lu.f90
gfortran -c sqn.f90
gfortran -c csm.f90 -llapack -lblas
gfortran -c pa.f90

f2py -c nrt.f90 lu.f90 sqn.f90 csm.f90 pa.f90 -m p_avg

我在csm.f90中调用LAPACK函数zhegv()。一切都在编译,但是当我从终端调用ipython时

ipython --pylab

然后在ipython类型

from p_avg import pa

我看到了

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-1-8181d9e1b27d> in <module>()
----> 1 from p_avg import pa

ImportError: ./p_avg.so: undefined symbol: zhegv_

我还需要做些什么来确保f2py可以理解这个LAPACK函数调用吗?我看到其他人已经询问过如何直接使用f2py和LAPACK模块,但是我在这里使用另一段FORTRAN代码中的LAPACK函数。

谢谢。

更新: 当我通过在终端输入以下内容来尝试评论中建议的命令时,

f2py -L/usr/lib/lapack -llapack -c nrt.f90 lu.f90 sqn.f90 csm.f90 pa.f90 -m p_avg 

f2py -L/usr/lib/ -llapack -c nrt.f90 lu.f90 sqn.f90 csm.f90 pa.f90 -m p_avg

然后在ipython中键入以下内容,

from p_avg import pa

我得到了

----------------------------------------------------------------    -----------
ImportError                               Traceback (most recent    call last)
<ipython-input-1-8181d9e1b27d> in <module>()
----> 1 from p_avg import pa

ImportError: No module named p_avg

1 个答案:

答案 0 :(得分:1)

在这种情况下,你确实可以写

f2py -L/usr/lib/ -llapack -c nrt.f90 lu.f90 sqn.f90 csm.f90 pa.f90 -m p_avg

但您需要确保已安装lapack开发库。当我只安装了liblapack3时,上面的命令不起作用。