2
votes

One code work from runghc, but I can not compile same one with ghc command. Why?

Below is my minimal code and environment: https://gist.github.com/1588756

Works well:

$ runghc cat.hs

Can not compile:

$ ghc cat.hs -o cat

Macbook air, max os x snow leopard

2
Is it cat.hs or cat.cs? Naming it as cat.hs and use ghc cat.hs -o cat works for me (on Linux).kennytm
cat.cs is my wrong naming. Rename cat.hs, then works for me. Thanks.Matt - sanemat

2 Answers

7
votes

The .cs extension shown in your paste is wrong;1 rename the file to cat.hs and it'll work fine.

This error message:

ld: warning: ignoring file cat.cs, file was built for unsupported file format
which is not the architecture being linked (i386)

occurs when you pass a file GHC doesn't know how to handle; it just passes it on directly to the linker, which then ignores it as it doesn't know, either. :)

1 At least until GHC gets C# support...

4
votes

With the filename cat.cs, on linux I get

$ ghc cat.cs
/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin/ld:cat.cs: file format not recognized; treating as linker script
/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin/ld:cat.cs:1: syntax error

So indeed, since GHC doesn't know how to handle .cs files, it passes them as is to gcc for linking, gcc doesn't know either, so falls back to regarding it as a linker script, which of course doesn't turn out so well.

But you can tell GHC that it should treat whatever file you give it as, say a .hs file,

$ ghc -x hs cat.cs
[1 of 1] Compiling Main             ( cat.cs, cat.o )
Linking cat ...

runghc on the other hand doesn't care what the file is named, it tries to interpret the file as normal Haskell source, except if it has the extension .lhs, then it tries to interpret it as literate Haskell.