Windows下f90wrap安装失败:多定义错误求助
解决Windows 10+Python 2.7+MinGW下f90wrap安装的multiple_definition错误
我之前在Windows环境下用MinGW编译f90wrap给Python 2.7用的时候,遇到过一模一样的问题!这个错误的核心原因很明确:
Python 2.7的官方版本是用MSVC 9.0编译的,依赖MSVC的运行时库libmsvcr90.a;而你用的MinGW自带的libmingw32.a库中,包含了和MSVC运行时库重复的函数(比如atexit、_decode_pointer、_encode_pointer)。当链接扩展模块时,链接器遇到重复的符号定义,就会抛出这个报错。
下面是我亲测有效的解决方案:
方法1:临时设置环境变量快速解决
在Powershell中执行以下命令,先配置好链接器参数再安装f90wrap:
# 设置链接器选项,排除MinGW的冲突库,强制使用Python依赖的msvcr90 $env:LDFLAGS = "-Wl,--exclude-libs,libmingw32.a -Wl,--exclude-libs,libmingwex.a -Wl,--exclude-libs,libmsvcrt.a -lmsvcr90" # 切换到你下载的f90wrap源码目录 cd path\to\your\f90wrap-source-folder # 执行安装 python setup.py install
方法2:修改f90wrap的setup.py永久生效
如果方法1没有解决问题,可以直接修改源码的编译配置:
- 打开f90wrap源码根目录下的
setup.py文件 - 找到定义
ext_modules的代码段(文件中后段,包含多个Extension对象的列表) - 给每个
Extension对象添加extra_link_args参数,示例如下:ext_modules = [ Extension( 'f90wrap.arraydata', sources=['f90wrap/arraydatamodule.f90'], extra_link_args=['-Wl,--exclude-libs,libmingw32.a', '-Wl,--exclude-libs,libmingwex.a', '-Wl,--exclude-libs,libmsvcrt.a', '-lmsvcr90'] ), # 其他Extension对象也需要添加完全相同的extra_link_args ] - 保存修改后,删除源码目录下的
build文件夹(清理旧编译缓存),再运行python setup.py install
额外注意事项
- 确保你的MinGW和Python都是64位版本(你已经确认过,这点没问题)
- 如果遇到f2py相关的编译问题,可以提前设置环境变量指定编译器:
$env:FC = 'gfortran' $env:CC = 'gcc'
内容的提问来源于stack exchange,提问作者ansri
相关产品推荐
相关产品推荐

