F2PY无法使用print或write编译Fortran

时间:2016-08-01 08:34:27

标签: python visual-c++ fortran gfortran f2py

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

我在Windows 8.1上安装了gfortran(通过mingw-w64)和安装了MSVC Compiler for Python 2.7。正在使用的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

但是当我注释掉print(或write)语句时,它工作正常。

我注意到的一个奇怪的事情似乎是使用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 个答案:

答案 0 :(得分:0)

回答我自己的问题。

修复步骤:

  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]
  5. Fortran代码现在可以完美编译,可以从Python调用。