我在编译导入Text.Regex.Posix模块的Haskell程序时遇到问题。我试图在一个小测试程序中找出问题:
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
答案 0 :(得分:7)
我希望至少导出main
......即
module Main (main) where
但这不是问题所在。
$ ghc -o tester -package regex-posix Main.o
像这样的链接完全正常。
您应该使用cabal
作为构建系统,编译并与ghc --make
链接,或者小心手动公开所有必需的软件包。
答案 1 :(得分:5)
完全按照您的要求行事,但也将--make
传递给ghc
。
答案 2 :(得分:4)
你错过了--make标志,它让GHC为你解决了缺少的库依赖关系。