2012-01-10 32 views
2

來自runghc的一個代碼工作,但我不能用ghc命令編譯同一個代碼。爲什麼?爲什麼Haskell ghc不起作用,但runghc運作良好?

下面是我的最少的代碼和環境: https://gist.github.com/1588756

效果很好:

$ runghc cat.hs 

不能編譯:

$ ghc cat.hs -o cat 

的MacBook Air,最大OS X雪豹

+2

它是'cat.hs'還是'cat.cs'?命名爲'cat.hs'並使用'ghc cat.hs -o cat'適用於我(在Linux上)。 – kennytm 2012-01-10 14:40:43

+0

cat.cs是我錯誤的命名。重命名cat.hs,然後爲我工作。謝謝。 – sanemat 2012-01-10 16:14:56

回答

7

.cs e粘貼中顯示的xtension是錯誤的; 將文件重命名爲cat.hs,它會正常工作。

此錯誤消息:當你通過一個文件GHC不知道如何處理髮生

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

;它只是直接傳遞給鏈接器,然後忽略它作爲也不知道。 :)

至少直到GHC得到支持C#...

+1

+1。 – 2012-01-10 21:31:14

4

的文件名cat.cs,在Linux上我得到

$ 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 

所以事實上,自GHC不知道如何處理.cs文件,它將它們按原樣傳遞給gcc進行鏈接,gcc也不知道,因此退回到將其視爲鏈接器腳本,這當然不會那麼好。

但是你可以告訴GHC,它應該把你給任何文件作爲,說.hs文件,

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

runghc,另一方面不關心什麼文件被命名爲,它會嘗試將該文件解釋爲正常的Haskell源文件,除非其擴展名爲.lhs,然後嘗試將其解釋爲文字Haskell。

相關問題