2012-02-16 58 views
10

我對Haskell很新,而且我最近安裝了GHC平臺。我決定通過編譯一個簡單的Hello World程序來測試它:main = putStrLn "Hello, world"Haskell - 在GHC編譯問題

現在,當我進入命令行(Windows 7)時,找到正確的目錄並輸入ghc hello.hs,它會返回以下消息:「[1之1]編譯Main(hello.hs,hello.o)」。我明白,一旦編譯完成,它應該跟隨「鏈接hello.exe ...」,但永遠不會出現,並且不生成.exe。

基本上,有沒有任何明顯的原因會發生這種情況?代碼有問題嗎,有什麼我不知道的,或者我應該嘗試重新安裝Haskell平臺?

謝謝。

+1

要清楚:你是否擔心,因爲它沒有生成hello.exe,或者因爲它沒有顯示該位文本?它實際上是否生成可執行文件,並且該可執行文件是否按照指示執行? – 2012-02-16 22:35:32

+0

對不起 - 它不生成.exe。據我所知,也不產生.o或.hi文件。 GHC通常會在創建後將這些文件放在哪裏?在與.hs相同的目錄下? – 2012-02-16 23:09:21

+3

是的,它通常是相同的目錄。如果你有一個更老的GHC,你可能想'ghc --make hello.hs'。你有什麼版本的GHC? 'ghc --version'如果你最近安裝了它應該是7.0.4我認爲。我在Win7上有7.0.3,'ghc hello.hs && hello.exe'工作得很好。 – 2012-02-16 23:14:44

回答

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'了。 – 2012-02-17 10:45:17

+0

真的嗎?我不知道他們改變了它...... – MathematicalOrchid 2012-02-17 11:41:06

+2

是的,他們改變了它。另一個重要的變化是,默認情況下,rtsopts現在處於禁用狀態,所以如果您想用例如'+ RTS -s',你需要鏈接'-rtsopts'。 – 2012-02-17 11:51:44

10

我得到ghc鏈接我的程序到一個可執行文件,從文件的開頭刪除模塊聲明。