gpt4 book ai didi

python - 使用 gfortran 和 MSVC 在 Windows 上构建 fortran 扩展

转载 作者:太空宇宙 更新时间:2023-11-03 17:13:55 24 4
gpt4 key购买 nike

我正在使用 Fortran 源代码开发一个 python 包。我使用 gfortran 和 mingw32 (python setup.py build_ext --compiler=mingw32) 为 Python 2.7、3.3 和 3.4 构建包没有问题。但是,在针对 Python 3.5 进行构建时,我收到以下错误(有关详细信息,请参阅 this build job on AppVeyor):

File "C:\pythontest\lib\distutils\cygwinccompiler.py", line 86, in get_msvcr
raise ValueError("Unknown MS Compiler version %s " % msc_ver)
ValueError: Unknown MS Compiler version 1900

基于this Python issue据我了解,使用 mingw32 为 Python 3.5 构建短期内是不可能的。据我所知,这让我可以选择使用 msvc 编译器 (python setup.py build_ext --compiler=msvc)。但是,仍然使用 gfortran,我收到以下错误( details here ):

checkapexsh.o : error LNK2001: unresolved external symbol _gfortran_st_write
apexsh.o : error LNK2001: unresolved external symbol _gfortran_st_write
magfld.o : error LNK2001: unresolved external symbol _gfortran_st_write
apex.o : error LNK2001: unresolved external symbol _gfortran_st_write
makeapexsh.o : error LNK2001: unresolved external symbol _gfortran_st_write
apexsh.o : error LNK2001: unresolved external symbol _gfortran_transfer_character_write
checkapexsh.o : error LNK2001: unresolved external symbol _gfortran_transfer_character_write
checkapexsh.o : error LNK2001: unresolved external symbol _gfortran_st_write_done
apexsh.o : error LNK2001: unresolved external symbol _gfortran_st_write_done
magfld.o : error LNK2001: unresolved external symbol _gfortran_st_write_done
apex.o : error LNK2001: unresolved external symbol _gfortran_st_write_done
makeapexsh.o : error LNK2001: unresolved external symbol _gfortran_st_write_done
apexsh.o : error LNK2001: unresolved external symbol _gfortran_runtime_error_at
[et cetera]

这就是我首先选择使用 MinGW 的原因。不过,我也想支持 Python >= 3.5。有什么方法可以使用 gfortran 和 MSVC 在 Windows 上编译 fortran 扩展并避免上述错误吗?或者,是否有其他(免费)fortran 编译器可以与 MSVC 配合使用? (我很难找到任何东西。)

如果相关,here's a permanent link to my current setup.py .

最佳答案

对于 python.org 的任何发布的 CPython 3.5 版本或 mingw-w64 gfortran 的任何发布版本,这都是不可能的。一旦 mingwpy ( http://mingwpy.github.io/ ) 项目取得进一步进展,这将有望通过 python.org 版本的 CPython 3.5 实现。这在 Anaconda Python 3.5 发行版中可能是可能的,但我不确定。

您现在可以尝试的另一种选择是从 https://msys2.github.io/ 安装 MSYS2然后使用 pacman 安装 CPython 3.5 的 mingw-w64-python3 发行版。此版本的 Python 本身是使用 MinGW-w64 GCC 构建的,因此不存在与 CPython 的 python.org 版本相同的 MSVC-vs-GCC 兼容性问题。但是,如果您尝试下载或编译使用 MSVC 构建的二进制包,则会遇到问题。此 MSYS2 Python 发行版中的 pip 版本可以配置为避免下载 MSVC 二进制文件,而是默认使用 MSYS2 mingw-w64-gcc(以及 f2py 的 mingw-w64-gcc-fortran)编译器从源代码构建包。

关于python - 使用 gfortran 和 MSVC 在 Windows 上构建 fortran 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33822554/

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