使用Homebrew安装GHC时遇链接器错误:未知选项-no_fixup_chains
问题分析与解决方案
关于-no_fixup_chains选项
-no_fixup_chains是Apple自家ld链接器的私有扩展选项,专门用于ARM64架构的Mach-O二进制文件优化,作用是禁用链接时的修复链处理。这个选项是在Apple Silicon推出后的较新MacOS版本中才加入的,你的MacOS 10.15(Catalina)属于纯x86_64时代的系统,系统自带的ld以及Homebrew安装的gcc配套ld都不支持该选项。
失败原因
Homebrew的GHC包当前默认针对支持ARM64的新版MacOS编译,构建脚本会自动添加这个仅新版Apple ld能识别的参数。而你的10.15系统的ld无法解析该选项,最终导致依赖包clock-0.8.3构建失败。
至于安装gcc-13无效,是因为Homebrew构建Haskell包时默认调用系统的Apple ld,而非gcc配套的ld.gcc,所以即使升级gcc,链接器依然是旧版Apple ld,问题无法解决。
可行解决方案
- 安装适配旧系统的GHC版本:选择GHC 8.10.x或更早的版本,这类版本的构建配置不会包含
-no_fixup_chains选项。执行命令:brew install ghc@8.10,安装完成后需配置环境变量让系统优先使用该版本。 - 手动修改
clock-0.8.3的构建参数:找到该包的源码目录,编辑.cabal文件或Setup.hs,移除链接器参数中的-no_fixup_chains,之后重新执行构建命令。 - 换用MacPorts安装GHC:MacPorts对旧MacOS版本的兼容性优于Homebrew,可能提供了适配10.15的GHC预编译包,可规避这类链接器参数问题。
内容的提问来源于stack exchange,提问作者Nana Tatsudaki
相关产品推荐
相关产品推荐

