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

编译Agda时遇GHC与clang链接器(ld)错误求助

解决GHC 9.8.2与clang链接器-no_warn_duplicate_libraries错误

问题说明

在macOS上通过brew安装的GHC 9.8.2,编译Agda程序或纯Haskell程序时,链接阶段都会报错:

ld: unknown option: -no_warn_duplicate_libraries
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ghc-9.8.2: `clang' failed in phase `Linker'. (Exit code: 1)

即便在zsh里设置clang别名指向gcc-13,错误依旧——因为GHC会直接调用系统中的clang可执行文件,不会解析shell别名。

解决方案

1. 单次编译时指定GHC使用gcc作为链接器

编译Agda程序时,给agda传递GHC参数,强制使用gcc-13作为编译器和链接器:

agda --compile --ghc-opt=-pgmc=gcc-13 --ghc-opt=-pgml=gcc-13 hello-world.agda

编译纯Haskell程序时,直接给ghc加参数:

ghc -pgmc=gcc-13 -pgml=gcc-13 -o hello hello.hs

参数说明:

  • -pgmc=gcc-13:指定C编译器为gcc-13
  • -pgml=gcc-13:指定链接器为gcc-13

2. 永久配置GHC默认使用gcc

如果不想每次编译都加参数,可以修改GHC的全局配置:

  1. 找到GHC的settings文件,路径通常是~/.ghc/x86_64-darwin-9.8.2/settings(根据你的架构和版本调整)
  2. 打开文件,找到("C compiler command", "clang")和("Linker command", "clang")这两行,把clang替换为gcc-13
  3. 保存文件后,后续GHC编译会自动使用gcc-13

或者通过环境变量配置,在~/.zshrc里添加:

export GHC_OPTS="-pgmc=gcc-13 -pgml=gcc-13"

执行source ~/.zshrc生效后,编译时无需手动加参数。

3. 降级clang到兼容版本

如果不想用gcc,可以尝试使用Xcode自带的clang(而非Homebrew的新版),执行以下命令切换:

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

Xcode自带的clang版本通常会兼容GHC传递的链接器选项。

关于GHC修复进度

该问题已在GHC官方issue中记录,后续版本会修复该兼容性问题,但当前版本通过上述临时方案即可正常编译,无需等待修复。


内容的提问来源于stack exchange,提问作者shingo.nakanishi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 00:27:14