我在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上。
我该如何解决这个问题?
答案 0 :(得分:19)
您是否安装了binutils-gold
?如果是,这就是问题所在(因为gold linker不支持--hash-size
AFAIK)。
可能的解决方案:
ld
可能会链接到ld.gold
,因此请将符号链接更改为ld.ld
-pgml
选项明确告诉haskell编译器使用哪个链接器:ghc -pgml ld.ld tupel.hs
ghc
,因为ghc
的配置脚本将构建ghc
,以便它不会使用--hash-size
ghc
版本,您可以在ghc
的设置文件/usr/lib/ghc-your.ghc.version/settings
答案 1 :(得分:2)
更新 - Ubuntu 12.10上的黄金似乎将GNU ld移至ld.bfd。为解决此问题,我按照建议删除了ld链接,并使用
重新创建链接 ln -s ld.bfd ld
ghc汇编现在正在进行中。
(无法看到如何破坏usr / lib / ghc中的设置文件,因为该条目是针对通过其命令行传递给ld的gcc,尽管这可能是我的首选选项,以防其他需要ld成为它的方式。)
感谢Dominic指向哪里看!这让我发疯了......