【问题标题】: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,然后为我工作。谢谢。

标签: haskell ghc


【解决方案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 .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      相关资源
      最近更新 更多