gpt4 book ai didi

python - 使用 f2py 编译 Fortran 模块

转载 作者:太空狗 更新时间:2023-10-30 00:41:42 25 4
gpt4 key购买 nike

我有一个 Fortran 模块,我正在尝试使用 f2py(在下面列出)进行编译。当我删除模块声明并将子例程单独留在文件中时,一切正常。但是,如果模块声明如下所示,我会得到以下结果:

> f2py.py -c -m its --compiler=mingw itimes-s2.f
...
Reading fortran codes...
Reading file 'itimes-s2.f' (format:fix,strict)
crackline: groupcounter=1 groupname={0: '', 1: 'module', 2: 'interface', 3: 'subroutine'}
crackline: Mismatch of blocks encountered. Trying to fix it by assuming "end" statement.
...
c:\users\astay13\appdata\local\temp\tmpgh5ag8\Release\users\astay13\appdata\local\temp\tmpgh5ag8\src.win32-3.2\itsmodule.o:itsmodule.c:(.data+0xec): undefined reference to `itimes_'
collect2: ld returned 1 exit status

在 f2py 中编译模块或子程序有什么不同?我是否在导致 f2py 出现问题的模块中遗漏了一些重要的东西?请注意,当我单独使用 gfortran 时,模块可以正常编译。

软件:Windows 7; gcc, gfortran 4.6.1 (MinGW); python 3.2.2; f2py v2

itimes-s2.f:

  module its

contains

subroutine itimes(infile,outfile)

implicit none

! Constants
integer, parameter :: dp = selected_real_kind(15)

! Subroutine Inputs
character(*), intent(in) :: infile
character(*), intent(in) :: outfile

! Internal variables
real(dp) :: num
integer :: inu
integer :: outu
integer :: ios

inu = 11
outu = 22

open(inu,file=infile,action='read')
open(outu,file=outfile,action='write',access='append')

do
read(inu,*,IOSTAT=ios) num
if (ios < 0) exit

write(outu,*) num**2
end do

end subroutine itimes

end module its

最佳答案

您正在尝试在 Python 模块中包含 Fortran 模块。如果需要,名称必须不同,例如

 f2py.py -c -m SOMEDIFFERENTNAME itimes-s2.f

结果将被称为 pythonmodule.fortranmodule.yourfunction()

您也可以将其导入为

from pythonmodule import fortranmodule
fortranmodule.yourfunction()

否则它可以在我的机器上运行。

关于python - 使用 f2py 编译 Fortran 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8564771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com