无法安装cairo:缺少符号_cairo_region_create_rectangles

时间:2014-04-15 17:40:07

标签: haskell cairo

我正在尝试为Chart包安装cairo后端。我首先根据说明here (Chart instructions)here (GTK/cairo)安装了GTK和cairo,并且发布了此帖子的最新版本:cairo-0.12.5.3gtk-0.12.5.7

但是,在尝试使用cairo时,我会遇到以下步骤进入墙壁。

> cabal install chart-cairo
Resolving dependencies...
Configuring Chart-cairo-1.2.2...
Building Chart-cairo-1.2.2...
Preprocessing library Chart-cairo-1.2.2...
[1 of 1] Compiling Graphics.Rendering.Chart.Backend.Cairo ( Graphics\Rendering\Chart\Backend\Cairo.hs, dist\build\Graphics\Rendering\Chart\Backend\Cairo.o )
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package array-0.4.0.1 ... linking ... done.
Loading package deepseq-1.3.0.1 ... linking ... done.
Loading package bytestring-0.10.0.2 ... linking ... done.
Loading package transformers-0.3.0.0 ... linking ... done.
Loading package mtl-2.1.2 ... linking ... done.
Loading package utf8-string-0.3.7 ... linking ... done.
Loading package cairo-0.12.5.3 ... linking ... ghc.exe: C:\Users\user\AppData\Roaming\cabal\i386-windows-ghc-7.6.3\cairo-0.12.5.3\libHScairo-0.12.5.3.a: unknown symbol `_cairo_region_create_rectangles'*
ghc.exe: unable to load package `cairo-0.12.5.3'
Failed to install Chart-cairo-1.2.2
cabal: Error: some packages failed to install:
Chart-cairo-1.2.2 failed during the building phase. The exception was:
ExitFailure 1

其他开罗计划也失败了。例如,随其安装的Drawing.hs文件失败,并显示:

Loading package cairo-0.12.5.3 ... linking ... <interactive>: C:\Users\user\AppData\Roaming\cabal\i386-windows-ghc-7.6.3\cairo-0.12.5.3\libHScairo-0.12.5.3.a: unknown symbol `_cairo_region_create_rectangles'
ghc.exe: unable to load package `cairo-0.12.5.3'

.a文件中缺少符号。 nm将其列为u(未定义)。

这是一个开放的bug,但它在三年内没有被触及。 (该错误有一条注释表明该问题与模板Haskell有关,但我没有对TH做任何事情。)

我需要更新版本的cairo库吗?上面的函数在哪里定义,为什么它不在库中?有关如何解决此问题的任何建议吗?

谢谢!

修改 我最终确定Graphviz和Gnuplot的%PATH%高于GTK捆绑,并且都有自己的cairo.dll。因此,错误的一个被运行时链接器拾取。删除这些路径元素并尝试重新安装所有的cairo和GTK。我遇到了一个新问题:

`libHSgtk-0.12.5.7.a: unknown symbol `__imp___fmode'`.  

我尝试了干净安装Haskell gtk和cairo包(整个过程)并确保这次加载了所有dll并使用Process Explorer验证了GTK目录。可悲的是,我没有更多的时间来处理这个问题,并且必须放弃尝试在Windows上使用Haskell。也许我将来某天会再试一次。

1 个答案:

答案 0 :(得分:1)

根据Cairo Commit logs,该功能的前导underscore已在cairo- 1.9.2 中删除。如果调用者在Haskel端(这似乎不符合我们的注释),则考虑使用之前的版本;如果在gtk包内抛出异常,则考虑使用更新的版本。