I wrote a basic hello world program in haskel and tried to compile it with:
ghc filename.hs. It produces .hi and .o files but no executable and displays
this error in the linker:

> 
> marox@IT-marox:~/Marox$ ghc tupel.hs  
> 
>  Linking tupel ...  
> 
>  /usr/bin/ld: --hash-size=31: unknown option  
> 
>  /usr/bin/ld: use the --help option for usage information  
> 
>  collect2: ld returned 1 exit status 
> 
> 
> 

Googling didn't return any useful information.

I am on ubuntu 12.04.

How can I fix this?
['https://Stackoverflow.com/questions/13046319', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/1770728/']
Have you `binutils-gold` installed? If yes, this is the problem (since the [gold linker](http://en.wikipedia.org/wiki/Gold_%28linker%29) does not support `--hash-size` AFAIK).

Possible solutions:

1. remove gold
2. your `ld` probably links to `ld.gold`, so change the symlink to `ld.ld`
3. tell the haskell compiler explicitly which linker to use with the `-pgml` option: `ghc -pgml ld.ld tupel.hs`
4. install `ghc` from source, since the configure script of `ghc` will then build `ghc` so that it won't use `--hash-size`
5. Depending on your version of `ghc`, you can adjust the linker settings in `ghc`'s setting file `/usr/lib/ghc-your.ghc.version/settings`
Update - gold on Ubuntu 12.10 appears to move GNU ld to ld.bfd. To fix this problem I deleted the ld link as recommended and remade the link with

```
  ln -s ld.bfd ld

```

ghc compilations are now going through.

(Couldn't see how to subvert the settings file in usr/lib/ghc, as the entry is for gcc which passes through its commandline to ld, although this would have been my preferred option, in case something else needs ld to be the way it was.)

Thanks to Dominic for the pointer of where to look! It was driving me crazy...