【问题标题】:Compiling separate modules in GHC在 GHC 中编译单独的模块
【发布时间】:2013-09-05 11:24:07
【问题描述】:

我真的很难在 GHC 中做一件非常简单的事情:我有一个可以正常工作和编译的程序,但是当我将它拆分以便部分代码位于单独的模块中时,我无法获得它工作。单独的模块称为 FICutilities

ghc -o FICutilities FICutilities.hs C:\ghc\ghc-6.10.1/libHSrts.a(Main.o):Main.c:(.text+0x7): 未定义引用 __stginit_ZCMain' C:\ghc\ghc-6.10.1/libHSrts.a(Main.o):Main.c:(.text+0x36): undefined reference to ZCMain_main_closure' collect2: ld 返回 1 个退出状态

据我所知,这是因为没有 main 函数,但我不想在这个模块中有一个。我使用的是 6.10.1 版本,因为我无法使用更新的版本。

有人可以帮忙吗?!谢谢,克莱尔。

【问题讨论】:

  • 你不应该使用 GHC 6.10,许多库无法使用它 afaik

标签: haskell ghc


【解决方案1】:

只需添加-c 开关。

但是,您不应该自己构建模块:推荐的构建方式是使用 Cabal。

其他方式有:

  1. ghc --make Main.hs 构建 main 并根据需要重新编译其依赖项。
  2. ghc -M Main.hs 递归解析导入并生成包含依赖项的 makefile,以便您可以在构建系统中使用此信息。

http://www.haskell.org/ghc/docs/latest/html/users_guide/modes.htmlhttp://www.haskell.org/ghc/docs/latest/html/users_guide/modes.html#make-mode--make 均已弃用。如果 Cabal 是一个可行的选择,则不建议这样做。如果没有 Cabal,一个大项目很难维护。 Haskell 工具链中的一些工具具有 Cabal 插件(例如 UUAGC 属性语法预处理器等)。

【讨论】:

  • 本教程将向您展示如何使用 Cabal。 haskell.org/haskellwiki/How_to_write_a_Haskell_program
  • 有人告诉我 --make 标志已被弃用,可以删除。这是真的吗?
  • @kqr:--make 标志现在是默认值,因此可以省略,但标志本身似乎并未被弃用(请参阅 nponeccop 到 GHC 文档的链接)。不过,这在 GHC 6.10 中并非如此。
猜你喜欢
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
  • 2013-05-24
  • 1970-01-01
  • 2012-02-29
  • 2020-03-27
  • 2013-03-17
  • 1970-01-01
相关资源
最近更新 更多