Haskell - GHC编译问题

14
我是Haskell的新手,最近安装了带有GHC的平台。我决定通过编译一个简单的“Hello World”程序来测试它:main = putStrLn "Hello, world"
现在,当我进入命令行(Windows 7),找到正确的目录,并键入ghc hello.hs时,会返回以下消息:“[1 of 1] Compiling Main (hello.hs, hello.o)”。我知道一旦编译完成,它应该跟随“Linking hello.exe...”,但从未出现过,也没有生成.exe文件。
基本上,是否有任何明显的原因导致这种情况发生?代码有问题吗?是否有我不知道的问题,还是我应该尝试重新安装Haskell平台?
谢谢。

1
明确一下:你的担忧是因为它没有生成 hello.exe,还是因为它没有显示这段文本?它是否实际生成了可执行文件,并且该可执行文件按照指示执行了操作? - Julian Fondren
抱歉 - 它不会生成 .exe 文件。据我所知,它也不会生成 .o 或 .hi 文件。一旦创建,GHC 通常会将这些文件放在哪里?与 .hs 文件相同的目录中吗? - user1214949
3
通常情况下,它们都在同一个目录下。如果你使用的是旧版 GHC ,你可能需要使用 ghc --make hello.hs 命令。你使用的 GHC 版本是多少?如果你最近安装了它,可以使用 ghc --version 命令查看版本号,我想应该是 7.0.4 版本。我在 Win7 上使用的是 7.0.3 版本,ghc hello.hs && hello.exe 命令可以正常工作。 - Dan Burton
尝试从命令行编译.hs文件仍然无法正常工作,即使使用了上述建议(版本为7.0.4)。然而,当使用“打开方式...”并选择ghc时,它似乎可以正常编译。一切都在那里,.exe文件按预期运行。虽然我仍然有点恼火,因为将来可能需要使用选项时它不会在命令行中工作,但现在应该可以正常工作。感谢大家的意见。 - user1214949
我可以编译我的Hello.hs文件,出现了*.hi、*.o和*.exe文件,但是当我尝试运行Hello.exe时,命令提示符会一直运行,什么也不会发生... - Suspended
3个回答

16

我删除了文件开头的模块声明,让 ghc 把我的程序链接成一个可执行文件。


1

它是否生成了a.exe或a.out.exe或a.out文件?如果没有,那么也许你可以自己链接它?ld -o hello.exe hello.o或者在你的平台上是什么链接命令。


1
我会使用--make选项,例如ghc --make hello.hs。(如果你愿意,你实际上可以省略文件扩展名。)这将自动确定需要做什么,需要链接哪些包(如果有的话),并且通常会做你期望的一切。

6
在ghc-7.0.*版本中,“--make”是默认模式。OP使用的是7.0.4版本,因此不再需要“--make”。 - Daniel Fischer
2
是的,它们已经改变了。另一个重要的变化是rtsopts现在默认禁用,因此如果您想使用例如+RTS -s运行某些内容,则需要链接-rtsopts - Daniel Fischer
是的,我知道 rtsopts 已经更改了[虽然我无法立刻说出哪个 GHC 版本]。但是我不知道 --make。 - MathematicalOrchid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接