2012-01-10 3 views
2

Un code fonctionne à partir de runghc, mais je ne peux pas en compiler un avec la commande ghc. Pourquoi?Pourquoi Haskell ghc ne fonctionne pas, mais runghc fonctionne bien?

Ci-dessous est mon code minimal et l'environnement: https://gist.github.com/1588756

fonctionne bien:

$ runghc cat.hs 

ne peut pas compiler:

$ ghc cat.hs -o cat 

air macbook, max os x léopard des neiges

+2

Est-ce 'cat.hs' ou' cat.cs'? Le nommer comme 'cat.hs' et utiliser' ghc cat.hs -o cat' fonctionne pour moi (sous Linux). – kennytm

+0

cat.cs est mon mauvais nom. Renommez cat.hs, puis travaille pour moi. Merci. – sanemat

Répondre

7

Le .cs e L'extension montrée dans votre pâte est fausse; Renommez le fichier en cat.hs et cela fonctionnera correctement.

Ce message d'erreur:

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

se produit lorsque vous passez un fichier GHC ne sait pas comment gérer; il le transmet directement à l'éditeur de liens, qui l'ignore alors comme ne sait pas non plus. :)

Au moins jusqu'à ce que GHC obtient le soutien C# ...

+1

+1 pour la note de bas de page. –

4

Avec le nom du fichier cat.cs, sur linux je reçois

$ 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 

Alors en effet, puisque GHC ne sait pas comment gérer .cs fichiers, il les transmet comme c'est à gcc pour la liaison, gcc ne sait pas non plus, donc retombe à le considérer comme un script de liaison, qui bien sûr ne tourne pas si bien.

Mais vous pouvez dire GHC qu'il doit traiter tout fichier que vous donnez comme, par exemple un fichier .hs,

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

runghc d'autre part ne se soucie pas ce que le fichier est nommé, il tente de interpréter le fichier comme une source Haskell normale, sauf s'il a l'extension .lhs, puis il essaie de l'interpréter comme étant Haskell.

Questions connexes