Windows下用MSYS2编译链接Coin-HSL库遇编译错误求助
问题:Windows下编译Coin-HSL(2021.05.05版本)出现未定义符号链接错误
环境与操作流程
- 系统:Windows,已在
C:/msys64路径安装MSYS2 - 已通过MSYS2安装gcc、gfortran、metis、openblas等依赖包
- 使用院校提供的带
./configure脚本的Coin-HSL 2021.05.05版本,执行预处理命令:
export PATH=/c/msys64/mingw64:$PATH export PATH=/c/msys64/mingw64/bin:$PATH wget https://karypis.github.io/glaros/files/sw/metis/metis-5.1.0.tar.gz tar -xvf metis-5.1.0.tar.gz cd coinhsl-2021.05.05 mv ../metis-5.1.0 .
- 编译安装命令:
./configure --prefix="Install_Path" make make install
错误现象
configure执行正常,但make时触发大量未定义符号的链接错误,示例:
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot export ma27as_: symbol not defined
- 同类错误覆盖多个求解器模块,且Coin-HSL源码目录中找不到
ma27as_相关符号定义 - 同时出现
metis_nodend_未定义的链接错误 - 尝试将生成的
libhsl.dll添加到系统PATH,问题未解决
排查与解决建议
- 调整Fortran编译符号规则
旧版Coin-HSL的Fortran源码编译时,符号名的大小写、下划线后缀可能和当前gcc/gfortran版本的默认规则不匹配。可在configure时添加兼容编译选项:
./configure --prefix="Install_Path" FCFLAGS="-ffixed-form -ffixed-line-length-132 -fno-underscoring"
若仍有问题,可尝试替换为-fsecond-underscore选项,根据错误情况调整。
- 单独编译并指定Metis路径
手动下载的Metis 5.1.0可能未被Coin-HSL的configure正确识别,建议先单独编译Metis:
cd metis-5.1.0 make config prefix=/path/to/metis-install make install
再在Coin-HSL的configure中显式指定Metis路径:
./configure --prefix="Install_Path" --with-metis=/path/to/metis-install
确保MSYS2工具链一致性
使用纯MinGW64终端(而非MSYS终端)进行编译,避免混合不同工具链。同时确认所有依赖包(gcc、gfortran、metis等)都是通过pacman安装的同一版本,不混用手动编译的库。验证Coin-HSL源码完整性
检查Coin-HSL目录下是否存在ma27等报错模块对应的.f/.f90源码文件,若缺失需重新获取完整的源码包。降级gcc/gfortran版本
当前使用的gcc 14.2.0版本较新,可能与旧版Coin-HSL兼容性不佳。可尝试安装gcc 12版本:
pacman -S mingw-w64-x86_64-gcc12 mingw-w64-x86_64-gfortran12
切换到旧版本工具链后重新编译。
内容的提问来源于stack exchange,提问作者LeoMa
相关产品推荐
相关产品推荐

