我正在尝试使用f2py
从一些Fortran代码编译python模块。使用ifort编译代码很好,但在使用f2py时会抛出错误。这是代码(它是两个文件):
gdat.f90:
MODULE GDAT
PUBLIC
INTEGER :: NX, NY
END MODULE GDAT
part.f90:
SUBROUTINE PART(ARR)
USE GDAT, ONLY: NX, NY
INTEGER, INTENT(IN) :: ARR(NX,NY)
PRINT*, ARR
END SUBROUTINE PART
我使用f2py -c gdat.f90 part.f90 -m part
编译它,但是我得到关于nx和ny没有被定义的错误,例如:
/var/tmp/tmp2hzU6s/src.linux-x86_64-2.7/untitledmodule.c:在函数'f2py_rout_untitled_part'中:
/var/tmp/tmp2hzU6s/src.linux-x86_64-2.7/untitledmodule.c:180:错误:'nx'未声明(首次在此函数中使用)
明确形状的数组ARR
的定义似乎存在问题。就像我说的,它在ifort上编译得很好。
我知道这是一段简单的代码,可以用另一种方式编写,但它只是我写的一个测试文件:我实际上是在尝试编译一大堆具有大量这些显式数组的fortran模块(使用来自中央模块的变量来定义边界)中的定义,所以我真的想让它工作而不是重写其他代码!
答案 0 :(得分:1)
据我所知,你遇到的问题是,数组的大小必须是ALLOCATABLE
动态的,或者已经用数值常量或参数修正。
在您的情况下,变量nx
和ny
既不设置也不参数。如果你想将你的两个文件分别编译成模块(ifort
而不是f2py
),它也应该抱怨。
答案 1 :(得分:0)
尝试通过
创建签名文件f2py -m pythmod -h signature.pyf gdat.f90 part.f90
然后将其与
一起使用f2py -c signature.pyf gdat.f90 part.f90 .
这将创建文件 pythmod.so 。