【发布时间】:2011-06-19 04:46:48
【问题描述】:
我在 Windows 上遇到 ghci+cairo 的问题。当我尝试加载时,例如像这样的“ghci -package cairo”,它会失败并出现以下错误:
正在加载包 random-1.0.0.2 ... 链接 ... 完成。 加载包haskell98 ...链接...完成。 正在加载包 syb-0.1.0.2 ... 正在链接 ... 完成。 正在加载包 base-3.0.3.2 ... 链接 ... 完成。 正在加载包 mtl-1.1.0.2 ...链接...完成。 : C:\Users\alexeys\AppData\Roaming\cabal\cairo-0.12.0\ghc-6.12.3\HScairo-0.12.0.o: 未知符号`_cairo_surface_destroy' 正在加载包 cairo-0.12.0 ... 链接 ...:无法加载包 'cairo-0.12.0'即使是最简单的程序也不能在交互模式下运行,例如 cairo 包附带的“Text.hs”。然而,使用 'ghc --make' 编译后,一切都按预期工作,所以它不是“缺少 dll”的问题 - 一切就绪。
我使用“filemon”查看“ghci”加载的内容,在日志中我可以看到“libcairo-2.dll”(并且这个库定义了“_cairo_surface_destroy”符号)被成功找到并加载,所以我没有真的不明白——它还想要什么?
【问题讨论】:
-
也许这是一个“线程”问题?最近有一个关于 SOE 图形库的 Haskell 咖啡馆线程表现出类似的行为“来自 Haskell 表达式悬挂学校的代码”-haskell.org/pipermail/haskell-cafe/2011-January/088697.html。抱歉,我不知道分辨率。
-
libcairo-2.dll 是否在路径名中有空格的位置?能否请您发布您正在使用的 ghci 版本(无论如何这看起来像是一个链接器错误)?
-
可能是
stdcall/ccall不匹配。 DLL中的符号名称是否有@4之类的后缀? -
我正在使用 HaskellPlatform 2010.2.0.0 附带的 ghc 6.12.3。 'libcairo-2.dll' 在 C:\GTK\bin 中,没有空格或任何东西。此外,我用“filemon”查看了 ghci 的作用,可以看出它在进程中加载了这个库 - 所以可能不是库位置问题。
-
对于库,该符号的 nm 给出:“68df9f58 T _cairo_surface_destroy”。我没有看到任何错误,并且定义了符号。图书馆取自