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

需显式为ld.exe添加哪些库以链接Fortran目标文件生成DLL?

解决Fortran目标文件链接时的未定义引用问题

核心原因

直接调用ld链接Fortran目标文件时,不会自动包含gfortran编译链依赖的运行时库和启动库;而gfortran作为编译驱动程序,会自动处理这些依赖项,因此分步骤用ld会出现未定义引用错误,一步编译则可正常完成。

解决方案

方法1:查看gfortran自动链接的库(最准确)

执行以下命令,查看gfortran链接时实际调用ld的完整参数:

gfortran -v main.o -o main.exe

输出中会显示ld的命令行,其中带-l前缀的参数就是需要手动添加的库。比如32位MinGW环境下,通常会包含-lmingw32、-lgfortran、-lgcc_s、-lmingwex、-lquadmath等。

方法2:手动添加必要库到ld命令

将上述库显式添加到ld的链接命令中,注意替换为你的gfortran安装路径下的lib目录(比如C:\MinGW\lib):

  • 链接可执行文件示例:
ld main.o -o main.exe -L"C:\MinGW\lib" -lmingw32 -lgfortran -lgcc_s -lmingwex -lquadmath
  • 生成DLL示例:
ld -shared --export-all-symbols --output-def cbesh.def cbesh.flib -o cbesh.dll -L"C:\MinGW\lib" -lgfortran -lgcc_s -lmingwex -lquadmath

方法3:用gfortran驱动DLL生成(更简便可靠)

无需手动调用ld,直接用gfortran生成DLL,它会自动处理所有依赖库:

gfortran -shared -o cbesh.dll cbesh.flib -Wl,--export-all-symbols,--output-def,cbesh.def

之后再执行lib.exe /MACHINE:x86 /def:cbesh.def生成Visual Studio可用的lib文件即可。

关键库说明

  • libmingw32.a:提供__main等程序初始化函数(仅链接可执行文件时需要,DLL通常不需要)
  • libgfortran.a:Fortran核心运行时库
  • libgcc_s.a:GCC底层支持库
  • libmingwex.a:提供cabsf这类Windows平台扩展函数
  • libquadmath.a:四精度复数运算支持库(代码用到相关功能时需要)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 02:06:27