一个代码来自runghc,但我无法用ghc命令编译同一个代码。为什么呢?
以下是我的最小代码和环境: https://gist.github.com/1588756
效果很好:
$ runghc cat.hs
无法编译:
$ ghc cat.hs -o cat
Macbook air,max os x snow leopard
答案 0 :(得分:7)
粘贴中显示的.cs
扩展程序错误; 1 将文件重命名为cat.hs
,它将正常工作。
此错误消息:
ld: warning: ignoring file cat.cs, file was built for unsupported file format
which is not the architecture being linked (i386)
传递文件时发生GHC不知道如何处理;它只是直接传递给链接器,然后链接器忽略它,因为它也不知道。 :)
1 至少在GHC获得C#支持之前......
答案 1 :(得分: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。