当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
非常感谢任何帮助。
答案 0 :(得分:0)
回答我自己的问题。
修复步骤:
C:\userdata\[user]\Miniconda\include
)--compiler=msvc
更改为--compiler=mingw32
conda uninstall numpy
,记下它删除的所有包,然后conda install [list of packages that were previously removed]
Fortran代码现在可以完美编译,可以从Python调用。