來自runghc的一個代碼工作,但我不能用ghc命令編譯同一個代碼。爲什麼?爲什麼Haskell ghc不起作用,但runghc運作良好?
下面是我的最少的代碼和環境: https://gist.github.com/1588756
效果很好:
$ runghc cat.hs
不能編譯:
$ ghc cat.hs -o cat
的MacBook Air,最大OS X雪豹
來自runghc的一個代碼工作,但我不能用ghc命令編譯同一個代碼。爲什麼?爲什麼Haskell ghc不起作用,但runghc運作良好?
下面是我的最少的代碼和環境: https://gist.github.com/1588756
效果很好:
$ runghc cat.hs
不能編譯:
$ ghc cat.hs -o cat
的MacBook Air,最大OS X雪豹
.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。 – 2012-01-10 21:31:14
的文件名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。
它是'cat.hs'還是'cat.cs'?命名爲'cat.hs'並使用'ghc cat.hs -o cat'適用於我(在Linux上)。 – kennytm 2012-01-10 14:40:43
cat.cs是我錯誤的命名。重命名cat.hs,然後爲我工作。謝謝。 – sanemat 2012-01-10 16:14:56