2012-02-16 2 views
10

Я очень новичок в Haskell, и недавно я установил платформу с GHC. Я решил проверить его, составив простую программу Hello World: main = putStrLn "Hello, world"Haskell - компиляция вопросов в GHC

Теперь, когда я захожу в командной строке (Windows 7), найдите нужный каталог и введите ghc hello.hs, он возвращается со следующим сообщением : "[1 из 1] Компиляция Main (hello.hs, hello.o)". Я понимаю, что после компиляции он должен следовать с «Linking hello.exe ...», но этого никогда не происходит, и не создается .exe.

В принципе, существует ли какая-либо заметная причина, почему это происходит? Есть ли проблема с кодом, есть ли что-то, о чем я не знаю, или просто попробую переустановить платформу Haskell?

спасибо.

+1

Чтобы быть ясным: вы обеспокоены тем, что он не производит hello.exe или потому, что он не отображает этот бит текста? Выполняет ли это собственно исполняемый файл и выполняет ли этот исполняемый файл в соответствии с инструкциями? –

+0

Извините, но не создает .exe. Насколько я могу судить, и не создает файлы .o или .hi. Где GHC обычно помещает эти файлы после создания? В том же каталоге, что и .hs? –

+3

Да, это, как правило, тот же каталог. Если у вас есть старший GHC, вы можете захотеть «ghc --make hello.hs». Какая версия GHC у вас есть? 'ghc --version', если вы недавно установили его, должно быть 7.0.4, я думаю. У меня 7.0.3 на Win7 и 'ghc hello.hs && hello.exe' работает отлично. –

ответ

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'. –

+0

Действительно? Я понятия не имел, что они изменили его ... – MathematicalOrchid

+2

Да, они изменили его. Другим важным изменением является то, что rtsopts теперь отключены по умолчанию, поэтому, если вы хотите запустить что-либо с помощью, например, '+ RTS -s', вам нужно связать с' -rtsopts'. –

10

У меня есть ghc, чтобы связать мою программу с исполняемым файлом, удалив объявление модуля с самого начала файла.