You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows10下f2py编译Fortran模块后无法导入:DLL加载失败

解决f2py编译后导入模块时DLL加载失败的问题

问题描述

在Windows 10系统中使用f2py编译Fortran代码(编译命令:f2py -c -m exsnow exsnow19.f PACK19.f),编译过程成功,但执行导入命令import snow19.exsnow as snow17时出现错误:

ImportError: DLL load failed while importing exsnow: The specified module could not be found.

已尝试的方案:

  • 将.libs目录下的所有.dll文件复制到.pyd文件所在目录,问题未解决;
  • 添加-static编译标志,编译时报错:Don't know how to compile -static

编译后的目录结构:

snow19
   | exsnow/.libs/*.dll
   | *.pyd

可行解决方法

1. 检查依赖DLL完整性

用Dependency Walker工具打开你的.pyd文件,查看是否缺失依赖DLL。除了编译生成的DLL,还可能依赖Fortran编译器的运行时库(比如MinGW的libgfortran-5.dll、Intel Fortran的libifcoremd.dll等)。

  • 若发现缺失编译器运行时DLL,直接将对应DLL复制到.pyd所在目录;
  • 或者将编译器的bin目录添加到系统环境变量PATH中。

2. 调整f2py编译命令与文件结构

修改编译命令,指定输出目录并让f2py自动处理依赖路径:

f2py -c -m exsnow exsnow19.f PACK19.f --build-dir ./build --fcompiler=gnu95

(若使用Intel编译器,替换为--fcompiler=intelem)
编译完成后,将生成的.pyd和.libs目录下的DLL统一移到snow19根目录,确保路径层级一致。

3. 临时添加DLL目录到Python路径

在导入模块前,手动将DLL所在目录加入Python路径:

import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), 'snow19', 'exsnow', '.libs'))
import snow19.exsnow as snow17

4. 验证编译器环境配置

确保编译时使用的Fortran编译器(如MinGW-w64、Intel Fortran)环境变量配置正确:

  • MinGW用户需将其bin目录加入系统PATH;
  • Anaconda用户需激活对应环境,保证f2py与编译器版本匹配。

5. 静态链接运行时库(针对MinGW)

不要直接加-static,通过--link-args传递静态链接参数:

f2py -c -m exsnow exsnow19.f PACK19.f --link-args="-static-libgcc -static-libgfortran"

此命令会静态链接GCC和GFortran的运行时库,减少外部DLL依赖。

内容的提问来源于stack exchange,提问作者Abhinav Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:05:05