Haskell ghc编译/链接错误,不创建可执行文件。 (Linux)的

时间:2012-10-24 09:23:25

标签: linux haskell compilation linker ghc

我在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上。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:19)

您是否安装了binutils-gold?如果是,这就是问题所在(因为gold linker不支持--hash-size AFAIK)。

可能的解决方案:

  1. 删除黄金
  2. 您的ld可能会链接到ld.gold,因此请将符号链接更改为ld.ld
  3. 使用-pgml选项明确告诉haskell编译器使用哪个链接器:ghc -pgml ld.ld tupel.hs
  4. 从源代码安装ghc,因为ghc的配置脚本将构建ghc,以便它不会使用--hash-size
  5. 根据您的ghc版本,您可以在ghc的设置文件/usr/lib/ghc-your.ghc.version/settings
  6. 中调整链接器设置

答案 1 :(得分:2)

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

重新创建链接
  ln -s ld.bfd ld

ghc汇编现在正在进行中。

(无法看到如何破坏usr / lib / ghc中的设置文件,因为该条目是针对通过其命令行传递给ld的gcc,尽管这可能是我的首选选项,以防其他需要ld成为它的方式。)

感谢Dominic指向哪里看!这让我发疯了......