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

如何链接无下划线编译的Fortran库与带下划线库(MUMPS+Matlab MKL)

解决MinGW编译MUMPS链接Matlab MKL BLAS/LAPACK的符号不匹配问题

最佳方案:用链接器脚本做符号映射(无需重编译)

MinGW链接器支持通过脚本直接映射符号,不用修改源代码或重编译任何库,完美匹配你的需求:

  • 创建一个文本文件(比如mkl_symbols.map),按以下格式把MUMPS调用的带下划线BLAS/LAPACK符号,映射到Matlab MKL对应的无下划线符号:
    _dgemm = dgemm;
    _dgesv = dgesv;
    _dsyev = dsyev;
    # 把链接时缺失的所有符号都按此格式补充
    
  • 编译链接MUMPS时,将该脚本作为链接参数传入:
    ld -o mumps_solver.exe [你的目标文件集合] -L"${MATLABROOT}\extern\lib\win64\mingw64" -lmkl_rt -T mkl_symbols.map
    
    或者在Makefile的LDFLAGS中添加-T mkl_symbols.map即可。

备选方案:局部调整编译下划线选项

如果链接器脚本维护起来麻烦,可仅对MUMPS中直接调用BLAS/LAPACK的接口文件使用-fno-underscoring编译,其余文件保持默认:

  • 定位MUMPS源码中所有调用BLAS/LAPACK的模块(比如dmumps_struc.f90、mumps_common.f90等)
  • 编译这些文件时单独添加-fno-underscoring选项:
    gfortran -c -fno-underscoring dmumps_struc.f90
    
  • 其余文件正常用默认选项编译,最后直接链接Matlab的MKL库即可。

不推荐的方案:手动补符号或重复打包MKL

手动补全缺失符号工作量极大且易出错;打包重复MKL库会增加程序体积,还可能引发符号冲突,完全没必要采用。

内容的提问来源于stack exchange,提问作者Patrick Kwok

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:02:41