问题 Haskell - GHC中的问题编译


我是Haskell的新手,我最近用GHC安装了这个平台。我决定通过编译一个简单的Hello world程序来测试它: main = putStrLn "Hello, world"

现在,当我进入命令行(Windows 7)时,找到正确的目录,然后输入 ghc hello.hs,它返回以下消息:“[1 of 1]编译Main(hello.hs,hello.o)”。我知道,一旦完成编译,它应该跟随“链接hello.exe ...”,但是从来没有,并且没有.exe生成。

基本上,有没有明显的理由为什么会发生这种情况?代码有问题,有什么我不知道的,或者我应该尝试重新安装Haskell平台?

谢谢。


4657
2018-02-16 22:32


起源

要明确:您是否担心因为它没有生成hello.exe,或者因为它没有显示那些文本?它是否实际生成可执行文件,并且该可执行文件是否按指示执行? - Julian Fondren
对不起 - 它不会产生.exe。据我所知,它也不会产生.o或.hi文件。 GHC通常会在何处创建这些文件?在与.hs相同的目录中? - Stacky McBears
是的,它通常是同一个目录。如果你有一个较旧的GHC,你可能想要 ghc --make hello.hs。你有什么版本的GHC? ghc --version 如果你最近安装它应该是7.0.4我认为。我在Win7和7.0上有7.0.3 ghc hello.hs && hello.exe 工作得很好。 - Dan Burton
尝试从命令行编译.hs仍然不起作用,具有上述建议(它是7.0.4)。但是,当使用“Open with ...”并选择ghc时,似乎编译得很好。一切都在那里,.exe按预期运行。虽然我仍然有点恼火,但如果我想在将来使用选项,它将无法在命令行中运行,这应该可行。感谢大家的投入 - Stacky McBears
我可以编译我的Hello.hs。 * .hi,*。o和* .exe文件出现,但是当我尝试运行Hello.exe时,cmd会继续运行,没有任何反应...... - Suspended


答案:


我得到ghc通过从文件的开头删除模块声明将我的程序链接到可执行文件。


10
2018-06-19 12:10





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


1
2018-02-17 07:44





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


1
2018-02-17 10:30



截至ghc-7.0。*, --make 是默认模式。 OP有7.0.4,所以不需要 --make 了。 - Daniel Fischer
真?我不知道他们改变了...... - MathematicalOrchid
是的,他们改变了。另一个重要的变化是rtsopts现在默认是禁用的,所以如果你想运行一些例如 +RTS -s,你需要链接 -rtsopts。 - Daniel Fischer
是的,我知道rtsopts已经改变[虽然我不能说哪个GHC版本脱离了我的头脑]。但我不知道--make。 - MathematicalOrchid