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

添加GHC性能分析选项触发构建错误:Cannot load -prof objects

问题解答

关于 -dynamic 参数的来源

这个参数大概率来自你的构建工具(Cabal/Stack)的默认配置,或是你当前使用的GHC发行版本身默认启用了动态链接。比如部分Linux发行版提供的GHC包是动态编译的,会自动添加 -dynamic 编译参数;也有可能是Stack的快照配置、Cabal的全局配置里默认开启了动态构建模式,你没手动指定过,但工具自动加上了。

关于“GHC是用-dynamic构建的”的含义

错误提示里的这句话不是说你在构建GHC,而是指你当前用来编译应用的GHC编译器本身,是通过动态链接的方式编译出来的。这种动态构建的GHC在生成性能分析(-prof)相关的目标文件时,会和动态链接机制产生冲突——性能分析需要静态链接的对象文件来收集 profiling 数据,而动态GHC默认生成动态对象,两者无法兼容,因此触发了错误。

解决方法

按照错误提示的两种方案任选其一即可:

  1. 添加 -fexternal-interpreter 参数:在hpack的ghc-options里加上这一项,让GHC使用外部解释器处理profiling,绕开动态链接的冲突。修改后的配置如下:
example-executable:
  source-dirs: src
  main: Main.hs
  ghc-options:
    - -O2
    - -prof
    - -fprof-auto
    - -rtsopts
    - -fexternal-interpreter
  1. 分两次构建:
    • 第一次用动态模式构建:不带-prof参数,保留-O2(如果工具没自动加-dynamic就手动添加),生成动态链接的目标文件;
    • 第二次用profiling模式构建,加上-prof、-fprof-auto,同时用-osuf指定不同的目标文件后缀(比如-osuf prof_o),避免和第一次的动态对象文件冲突。

另外,如果你不想折腾,也可以尝试换用静态编译版本的GHC(比如从GHC官网下载静态构建的二进制包,而非发行版自带的动态版本),静态GHC处理profiling时不会出现这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:12:17