Проблема компиляции на Haskell - PullRequest
1 голос
/ 02 октября 2009

У меня проблема с компиляцией программ на Haskell, которые импортируют модуль Text.Regex.Posix. Я попытался выделить проблему в небольшой тестовой программе:

module Main () where

import Text.Regex.Posix ((=~))

main = return ()

Запуск интерпретатора работает нормально:

/regex-test$ runghc Main.hs
/regex-test$ 

Однако, компиляция этой программы с ghc приводит к:

/regex-test$ ghc -o tester Main.hs
Main.o: In function `rmS_info':
(.text+0xf3): undefined reference to `__stginit_regexzmposixzm0zi72zi0zi3_TextziRegexziPosix_'
collect2: ld returned 1 exit status

После этого переводчик также перестает работать:

/regex-test$ runghc Main.hs

<interactive>:1:32: Not in scope: `main'
/projects/regex-test$ 

Я могу заставить его снова работать, сохранив файл снова, не внося никаких изменений.

У кого-нибудь есть идеи, как это решить?

Некоторая информация о моей системе:

/regex-test$ uname -a
Linux Hello-Ubuntu 2.6.28-15-generic #52-Ubuntu SMP Wed Sep 9 10:49:34 UTC 2009 i686 GNU/Linux

и

/regex-test$ ghc-pkg list
/usr/local/lib/ghc-6.10.3/./package.conf:
Cabal-1.6.0.3, HUnit-1.2.0.3, QuickCheck-1.2.0.0, array-0.2.0.0,
base-3.0.3.1, base-4.1.0.0, bytestring-0.9.1.4, containers-0.2.0.1,
directory-1.0.0.3, (dph-base-0.3), (dph-par-0.3),
(dph-prim-interface-0.3), (dph-prim-par-0.3), (dph-prim-seq-0.3),
(dph-seq-0.3), extensible-exceptions-0.1.1.0, filepath-1.1.0.2,
(ghc-6.10.3), ghc-prim-0.1.0.0, haddock-2.4.2, haskell-src-1.0.1.3,
haskell98-1.0.1.0, hpc-0.5.0.3, html-1.0.1.2, integer-0.1.0.1,
mtl-1.1.0.2, network-2.2.1, old-locale-1.0.0.1, old-time-1.0.0.2,
packedstring-0.1.0.1, parallel-1.1.0.1, parsec-2.1.0.1,
pretty-1.0.1.0, process-1.0.1.1, random-1.0.0.1,
regex-base-0.72.0.2, regex-base-0.93.1, regex-compat-0.71.0.1,
regex-posix-0.72.0.3, regex-tdfa-1.1.2, rts-1.0, stm-2.1.1.2,
syb-0.1.0.1, template-haskell-2.3.0.1, time-1.1.3, unix-2.3.2.0,
xhtml-3000.2.0.1
~/.ghc/i386-linux-6.10.3/package.conf:
HTTP-4000.0.4, zlib-0.5.0.0

Ответы [ 3 ]

7 голосов
/ 02 октября 2009

Я бы ожидал, что по крайней мере main будет экспортировано ... т.е.

module Main (main) where

но здесь проблема не в этом.

$ ghc -o tester -package regex-posix Main.o

Ссылка, подобная этой, прекрасно работает.

Вы должны либо использовать cabal в качестве вашей системы сборки, скомпилировать и связать с ghc --make, либо позаботиться о том, чтобы выставить все необходимые пакеты вручную.

5 голосов
/ 02 октября 2009

Делайте то же, что и вы, но передайте --make на ghc.

4 голосов
/ 03 октября 2009

Вам не хватает --make flag, который заставит GHC решить недостающие библиотечные зависимости для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...