安装pyOpt时Mingw64 gfortran报参数秩不匹配错误如何解决
解决pyOpt编译时gfortran秩不匹配报错方案
错误原因
高版本(10+)gfortran默认开启实参秩严格校验,pyOpt依赖的ALGENCAN求解器为早期Fortran77代码,存在标量/数组实参混用的不规范写法,低版本编译器仅触发警告,高版本直接判定为编译错误。
解决方案
方案1:添加编译参数跳过校验(最快生效)
给gfortran添加-fallow-argument-mismatch编译参数,允许实参不匹配的写法:
- Windows Mingw64环境下,编译前先在终端执行命令设置环境变量:
set FFLAGS=-fallow-argument-mismatch - 手动修改编译配置的场景,直接在setup.py或者Makefile的Fortran编译参数(FFLAGS)中添加该参数即可。
方案2:修改源码彻底修复
找到报错文件pyOpt/pyALGENCAN/source/evalal.f:
定位到802行调用sevalgjacp时传入的dum变量的声明位置,将原来的标量声明修改为和对应形参匹配的一维数组声明,例如将real dum改为real dum(*),即可匹配另一调用处传入的数组g/gp的秩要求。
方案3:降级编译器
将Mingw64的gfortran版本降级到9.x及更低版本,低版本gfortran默认不开启该严格校验,不会将该问题判定为错误。
内容的提问来源于stack exchange,提问作者user3883001
相关产品推荐
相关产品推荐

