在 Windows 上使用 cabal 安装 pango 和 GIO 时不可见 CULlong 类型的构造函数

Posted

技术标签:

【中文标题】在 Windows 上使用 cabal 安装 pango 和 GIO 时不可见 CULlong 类型的构造函数【英文标题】:CULLong-type constructor not visible when installing pango and GIO with cabal on Windows 【发布时间】:2014-01-21 10:17:16 【问题描述】:

我正在尝试在 Windows 8 上安装 Threadscope,以便遵循 Haskell 中的并行和并发编程 – 书。

我成功安装了 GTK+ –bundle,随后尝试通过 cabal 安装 threadscope。安装终止并显示以下信息:

cabal: Error: some packages failed to install:
gio-0.12.5.0 failed during the building phase. The exception was:
ExitFailure 1
gtk-0.12.5.0 depends on pango-0.12.5.0 which failed to install.
pango-0.12.5.0 failed during the building phase. The exception was:
ExitFailure 1
threadscope-0.2.2 depends on pango-0.12.5.0 which failed to install.

GIO 和 pango 出了点问题。

回首往事,控制台充满了这样的消息:

Not in scope: type constructor or class `CULLong'

在编译 GIO 和 pango 时会出现这些消息,如下所示:

Linking dist/setup-wrapper\setup.exe ...
Configuring gio-0.12.5.0...
Building gio-0.12.5.0...
Preprocessing library gio-0.12.5.0...
[ 1 of 24] Compiling System.GIO.Signals ( dist\build\System\GIO\Signals.hs, dist\build\System\GIO\Signals.o )
[ 2 of 24] Compiling System.GIO.Types ( dist\build\System\GIO\Types.hs, dist\build\System\GIO\Types.o )

System\GIO\Types.chs:1027:31:
    Not in scope: type constructor or class `CULLong'
    Perhaps you meant `CULong' (imported from Foreign.C.Types)

...

和,

Linking dist/setup-wrapper\setup.exe ...
Configuring pango-0.12.5.0...
Building pango-0.12.5.0...
Preprocessing library pango-0.12.5.0...
[ 1 of 14] Compiling Graphics.Rendering.Pango.Types ( dist\build\Graphics\Rendering\Pango\Types.hs, dist\build\Graphics\Rendering\Pango\Types.o )

Graphics\Rendering\Pango\Types.chs:256:29:
    Not in scope: type constructor or class `CULLong'
    Perhaps you meant `CULong' (imported from Foreign.C.Types)

...

我已经努力搜索,但找不到与此相关的任何内容。帮助将不胜感激!

【问题讨论】:

错误很明显“不在范围内:类型构造函数或类CULLong' Perhaps you meant CULong'(从 Foreign.C.Types 导入)”。我检查了模块System.GIO.Types,它有import Foreign.C.Types (CULong(..), CUInt(..)) 行。这个模块是自动生成的,所以无论哪个工具生成了这个文件,你都不会需要unsigned long long,但是当c2hs运行时它决定它需要unsigned long long。可能需要做很多工作,但您是否尝试过将 CULLong 添加到导入列表中? 我没有。我该怎么做? 在 hackage 上下载源代码,打开文件,进行更改,从这些文件安装包。 哦,你是这个意思。我以前没有尝试过,但我会尝试搜索如何做到这一点。如果你知道任何好的建议,我想听听。谢谢!编辑:我去看了 Hackage 上的 System.GIO.Types 模块,但我去那里时找不到页面。我也无法在 github repo 上找到该模块。那是怎么回事? 链接是hackage.haskell.org/package/gio-0.12.5.0/gio-0.12.5.0.tar.gz它在页面底部。没有太多可搜索的内容,您实际上是打开每个文件并将 CULLong(..) 添加到导入中,然后在包的根目录(包含 .cabal 文件的文件夹)中添加 cabal configurecabal install 【参考方案1】:

cabal configure 和 cabal install 似乎都将 Types.chs 恢复为原始版本(缺少 CULLONG(..))。

看起来你想要

cabal build
cabal register --global

这让你从 Pango 失踪了 CULlong。至少这是进步:-P

将 CULlong 添加到 Pango 中,我们将继续处理一个新的、更令人兴奋的错误:

GraphicsRenderingPongoStructs.hsc:87:21:
    Not in scope: type constructor or class 'Word9150716308491337760'

随后出现更多类似的错误。有什么想法吗?

【讨论】:

是的,你会注意到Word9150716308491337760 是 8 的倍数。在上下文中查看问题,似乎 template-hsc-gtk2hs.h 中定义的宏正在生成这些奇怪的类型名字。当给定的类型是整数类型时,它会检查它是有符号还是无符号,以确定该类型的 Int 或 Word 部分,然后附加 sizeof(t) * 8。如果这工作正常,你会得到像 Int32 这样的答案,对于一个签名的数据类型,它给出了 4 的 sizeof 结果。碰巧的是,sizeof 会返回像 1143839538561417220 这样的结果。

以上是关于在 Windows 上使用 cabal 安装 pango 和 GIO 时不可见 CULlong 类型的构造函数的主要内容,如果未能解决你的问题,请参考以下文章

如何将 dev 分支安装到 Cabal 沙箱中

如何让 ghci 查看我从 cabal 安装的软件包?

如何在 cabal 中查找已安装的包的反向依赖项

cabal 安装 mime 失败

通过 cabal (cabal-install) 在命令行中指定 ghc 选项,而无需编辑软件包的 .cabal 文件

如何解决 cabal 中损坏的依赖关系?