2011-02-01 49 views
10

我在windows上遇到ghci + cairo问题。当我尝试加载,例如像这样的“ghci的-package开罗”失败,出现以下错误:Haskell,GHC,win32,cairo

 
Loading package random-1.0.0.2 ... linking ... done. 
Loading package haskell98 ... linking ... done. 
Loading package syb-0.1.0.2 ... linking ... done. 
Loading package base-3.0.3.2 ... linking ... done. 
Loading package mtl-1.1.0.2 ... linking ... done. 
: C:\Users\alexeys\AppData\Roaming\cabal\cairo-0.12.0\ghc-6.12.3\HScairo-0.12.0.o: unknown symbol `_cairo_surface_destroy' 
Loading package cairo-0.12.0 ... linking ... : unable to load package `cairo-0.12.0' 

即使是最简单的程序不会在交互模式下工作,例如像“Text.hs”那与开罗包一起来。然而编译'ghc --make'一切都如预期的那样工作,所以它不是一个“缺失的dll”问题 - 一切都已到位。

我用'filemon'来查看“ghci”加载的内容,并在日志中可以看到'libcairo-2.dll'(并且此库有'_cairo_surface_destroy'符号定义)被找到并加载成功,所以我不用真的不明白 - 它还想要什么?

+0

也许它是一个'线程'问题?最近有一个关于SOE图形库的Haskell咖啡厅线程展示类似于“Haskell School of Expression Hanging的代码” - http://www.haskell.org/pipermail/haskell-cafe/2011-January/088697.html。对不起,我不知道这个决议。 – 2011-02-01 12:28:28

+0

任何机会是libcairo-2.dll在路径名中的空格位置?你也可以发布你正在使用哪个版本的ghci(在任何情况下,这看起来像一个链接器错误)? – 2011-02-01 16:46:33

回答

0

请运行GHC-PKG检查,看它是否是一致的

2

我怀疑你正在运行成许多的我只是做了这些问题。

我试着在窗口上最近用Haskell和ZeroMQ做些事情。 GHC在Windows上运行,ZeroMQ有一个MingW32端口,并且有一个标准的ZeroMQ Cabal软件包,所以我认为这是可行的。

但是:

  • GHC只适用于Windows动态链接部分支持。请参阅here
  • ZeroMQ Cabal包依赖于libzmq的静态版本。
  • Windows上的GHC使用MingW32约定为它的库和dll's。
  • ZeroMQ仅在其MingW32端口中构建动态.dll,而不是.a静态存档。

我不能把所有的东西放在一起,所以在我的windows系统上没有基于Haskell的ZeroMQ编码。