17

我在 haskel 中编写了一个基本的 hello world 程序,并尝试使用:ghc filename.hs 编译它。它生成 .hi 和 .o 文件,但没有可执行文件,并在链接器中显示此错误:

marox@IT-marox:~/Marox$ ghc tupel.hs
链接 tupel ...
/usr/bin/ld: --hash-size=31: 未知选项
/usr/bin/ld: 使用 --help 选项使用信息
collect2: ld 返回 1 退出状态

谷歌搜索没有返回任何有用的信息。

我在 ubuntu 12.04 上。

我怎样才能解决这个问题?

4

2 回答 2

19

binutils-gold安装了吗?如果是,这就是问题所在(因为黄金链接器不支持--hash-sizeAFAIK)。

可能的解决方案:

  1. 去除黄金
  2. ld可能链接到ld.gold,因此将符号链接更改为ld.ld
  3. 明确告诉 haskell 编译器与选项一起使用哪个链接器-pgmlghc -pgml ld.ld tupel.hs
  4. 从源代码安装,因为随后将构建ghc配置脚本,因此它不会使用ghcghc--hash-size
  5. 根据您的版本,您可以在的设置文件ghc中调整链接器设置。ghc/usr/lib/ghc-your.ghc.version/settings
于 2012-10-24T09:48:01.157 回答
2

更新 - Ubuntu 12.10 上的黄金似乎将 GNU ld 移至 ld.bfd。为了解决这个问题,我按照建议删除了 ld 链接,并重新制作了链接

  ln -s ld.bfd ld

ghc 编译现在正在进行中。

(看不到如何破坏 usr/lib/ghc 中的设置文件,因为该条目是针对 gcc 的,它通过其命令行传递给 ld,尽管这将是我的首选选项,以防万一需要 ld 成为原来如此。)

感谢多米尼克在哪里寻找的指针!它快把我逼疯了……

于 2013-03-28T07:28:16.140 回答