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
如有任何帮助,我们将不胜感激。
回答我自己的问题。
修复步骤:
- 忽略或清除 mingw-w64 安装。它不需要作为 Anaconda
自带 mingw
- 将 C_INCLUDE_PATH 添加到 Windows 系统环境变量并将其指向位于 anaconda 路径中的 include 文件夹(例如
C:\userdata\[user]\Miniconda\include
)
- 将
--compiler=msvc
更改为--compiler=mingw32
- 就我而言,它试图使用 ArcGIS 安装中的 numpy。要修复,我必须
conda uninstall numpy
,记下它删除的所有包,然后 conda install [list of packages that were previously removed]
Fortran 代码现在可以完美编译并且可以从 Python 调用。
当 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
如有任何帮助,我们将不胜感激。
回答我自己的问题。
修复步骤:
- 忽略或清除 mingw-w64 安装。它不需要作为 Anaconda 自带 mingw
- 将 C_INCLUDE_PATH 添加到 Windows 系统环境变量并将其指向位于 anaconda 路径中的 include 文件夹(例如
C:\userdata\[user]\Miniconda\include
) - 将
--compiler=msvc
更改为--compiler=mingw32
- 就我而言,它试图使用 ArcGIS 安装中的 numpy。要修复,我必须
conda uninstall numpy
,记下它删除的所有包,然后conda install [list of packages that were previously removed]
Fortran 代码现在可以完美编译并且可以从 Python 调用。