【问题标题】:GHC Panic: Loading temp shared object failedGHC 恐慌:加载临时共享对象失败
【发布时间】:2015-08-11 08:53:12
【问题描述】:

我们正在开发 Parsec 的一个分支(具有完整的 QuickCheck 测试套件、更好的错误消息和其他改进),并且已经取得了一些进展。大多数时候,我使用 Emacs 的 REPL,指定构建目标 tests(即显然是测试套件的名称)。这一直运行良好。

现在我们的东西通过了测试,一切似乎都很好,但是如果我用库目标(或省略它,即cabal replcabal repl lib:megaparsec)启动 REPL 并做一些事情,我会得到 GHC 恐慌:

λ> parseTest (string "rere" <* eof) "reri"
ghc: panic! (the 'impossible' happened)
  (GHC version 7.10.1 for x86_64-unknown-linux):
    Loading temp shared object failed: /tmp/ghc9380_0/libghc9380_93.so: undefined symbol: _hpc_tickboxes_megapzuEw3SHAmfXgNLpm5a31oXO6_TextziMegaparsecziError_hpc

Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug

由于代码可以通过cabal repl tests 编译并正常工作,因此我得出结论,这无论如何都不是我的编程错误,但可能是一个错误。

我找到了这张票:https://ghc.haskell.org/trac/ghc/ticket/10761,但我们的库不使用 Template Haskell。

实际问题是:我应该怎么做以及如何解决这个问题?我什至无法判断它是 Cabal 还是 GHC,我不知道如何构建可以重现问题的最小示例。


我已经举报了:

https://ghc.haskell.org/trac/ghc/ticket/10765#ticket

【问题讨论】:

  • 这看起来像是与HPC(haskell 程序覆盖率)有关的一些怪事。您是否尝试过禁用 HPC(运行 cabal clean 然后再次配置,确保未启用 HPC?)
  • @bennofs,确实,如果没有--enable-coverage 选项,这不会发生!你怎么知道这是HPC相关的?还要添加这个作为答案,这可能对未来的读者有用:-D 我应该向 HPC 维护人员报告错误吗?

标签: haskell ghc cabal


【解决方案1】:

如果你仔细阅读错误,你会注意到缺少的函数与hpc有关:

未定义符号:_hpc_tickboxes_megapzuEw3SHAmfXgNLpm5a31oXO6_TextziMegaparsecziError_hpc

我的猜测是,HPC(haskell 程序覆盖率)所做的检测与 GHCi 所做的 haskell 代码的交互式加载不兼容。禁用 HPC(cabal clean 后跟 cabal configure,确保在配置时禁用覆盖)应该可以解决问题。

我建议在 GHC 错误跟踪器上报告一个错误(虽然这也可能是一个阴谋集团的错误,但不确定是谁的错)。

【讨论】:

  • 我会先尝试 Cabal,因为它在 GitHub 上,而且我更容易与之交互,而且我认为它是 Cabal 或 HPC 的错误,而不是 GHC 中的错误。谢谢,当我第一次看到这个时,我有时想我需要睡觉,因为这一定是幻觉,不可能是真的! :-D
  • 嗯,HPC 是 GHC 的一部分
  • 哦,我明白了。我以为它是一个单独的包。
猜你喜欢
  • 2013-05-03
  • 2019-03-10
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
  • 2023-03-03
  • 2018-09-17
相关资源
最近更新 更多