为啥 Haskell ghc 不工作,但 runghc 工作良好?
Posted
技术标签:
【中文标题】为啥 Haskell ghc 不工作,但 runghc 工作良好?【英文标题】:Why Haskell ghc does not work, but runghc works well?为什么 Haskell ghc 不工作,但 runghc 工作良好? 【发布时间】:2012-01-10 14:35:41 【问题描述】:一个代码来自 runghc,但我不能用 ghc 命令编译相同的代码。为什么?
以下是我的最小代码和环境: https://gist.github.com/1588756
效果很好:
$ runghc cat.hs
无法编译:
$ ghc cat.hs -o cat
Macbook air、max os x 雪豹
【问题讨论】:
是cat.hs
还是cat.cs
?将其命名为 cat.hs
并使用 ghc cat.hs -o cat
对我有用(在 Linux 上)。
cat.cs 是我的错误命名。重命名 cat.hs,然后为我工作。谢谢。
【参考方案1】:
粘贴中显示的.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 不知道如何处理的文件时发生;它只是将它直接传递给链接器,然后链接器会忽略它,因为 it 也不知道。 :)
1 至少在 GHC 获得 C# 支持之前...
【讨论】:
【参考方案2】:使用文件名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
,然后它会尝试将其解释为 literate Haskell .
【讨论】:
以上是关于为啥 Haskell ghc 不工作,但 runghc 工作良好?的主要内容,如果未能解决你的问题,请参考以下文章