F2PY 无法使用 print 或 write 编译 Fortran

F2PY cannot compile Fortran with print or write

当 Fortran 代码包含打印或写入函数调用时,我在将 Fortran 编译成 Python 扩展模块时遇到问题。

我在 Windows 8.1 上安装了 gfortran(通过 mingw-w64)和 Python 2.7 的 MSVC 编译器。 Python 使用的发行版是 Anaconda。

test.f

subroutine test (a)

    integer, intent(out) :: a

    print *,"Output from test"

    a = 10

end subroutine test

运行 f2py -c -m --fcompiler=gnu95 test test.f90 我看到这些错误:

test.o : error LNK2019: unresolved external symbol _gfortran_st_write referenced in function test_
test.o : error LNK2019: unresolved external symbol _gfortran_transfer_character_write referenced in function test_
test.o : error LNK2019: unresolved external symbol _gfortran_st_write_done referenced in function test_
.\test.pyd : fatal error LNK1120: 3 unresolved externals

但是当我注释掉打印(或写入)语句时它工作正常。

我注意到的一件奇怪的事情是它似乎正在使用 Python for ArcGIS。

compile options: '-Ic:\users\[username]\appdata\local\temp\tmpqiq6ay\src.win-amd64-
2.7 -IC:\Python27\ArcGISx6410.3\lib\site-packages\numpy\core\include -IC:\Python
27\ArcGISx6410.3\include -IC:\Python27\ArcGISx6410.3\PC -c'
gfortran.exe:f90: test.f90

如有任何帮助,我们将不胜感激。

回答我自己的问题。

修复步骤:

  1. 忽略或清除 mingw-w64 安装。它不需要作为 Anaconda 自带 mingw
  2. 将 C_INCLUDE_PATH 添加到 Windows 系统环境变量并将其指向位于 anaconda 路径中的 include 文件夹(例如 C:\userdata\[user]\Miniconda\include
  3. --compiler=msvc更改为--compiler=mingw32
  4. 就我而言,它试图使用 ArcGIS 安装中的 numpy。要修复,我必须 conda uninstall numpy,记下它删除的所有包,然后 conda install [list of packages that were previously removed]

Fortran 代码现在可以完美编译并且可以从 Python 调用。