13

我正在使用具有以下配置的 VM:

  • Arch Linux(3.0-ARCH 内核)
  • GHC 7.0.3
  • 阴谋安装 0.10.2
  • 阴谋集团图书馆 1.10.1.0

当我尝试使用 cabal 构建 zlib 时...

$ cabal install zlib

我得到以下输出:

Resolving dependencies...
Downloading zlib-0.5.3.2...
Configuring zlib-0.5.3.2...
Preprocessing library zlib-0.5.3.2...
Stream.hsc:86:21: error: missing binary operator before token "("
Stream.hsc: In function ‘main’:
Stream.hsc:86:21: error: missing binary operator before token "("
Stream.hsc:86:21: error: missing binary operator before token "("
compiling dist/build/Codec/Compression/Zlib/Stream_hsc_make.c failed (exit code 1)
command was: /usr/bin/gcc -c dist/build/Codec/Compression/Zlib/Stream_hsc_make.c -o dist/build/Codec/Compression/Zlib/Stream_hsc_make.o -fno-stack-protector -fno-stack-protector -D__GLASGOW_HASKELL__=700 -Dlinux_BUILD_OS -Dlinux_HOST_OS -Dx86_64_BUILD_ARCH -Dx86_64_HOST_ARCH -I/usr/lib/ghc-7.0.3/bytestring-0.9.1.10/include -I/usr/lib/ghc-7.0.3/base-4.3.1.0/include -I/usr/lib/ghc-7.0.3/include -I/usr/lib/ghc-7.0.3/include -I/usr/lib/ghc-7.0.3/include/
cabal: Error: some packages failed to install:
zlib-0.5.3.2 failed during the building phase. The exception was:
ExitFailure 1

任何人都可以阐明这个构建错误吗?


编辑:这是 Stream.hsc 的一个片段,带有行号:

 82 import Foreign
 83          ( Word8, Ptr, nullPtr, plusPtr, peekByteOff, pokeByteOff, mallocBy    tes  
 84          , ForeignPtr, FinalizerPtr, newForeignPtr_, addForeignPtrFinalizer
 85          , withForeignPtr, touchForeignPtr )
 86 #if MIN_VERSION_base(4,4,0)
 87 import Foreign.ForeignPtr.Unsafe ( unsafeForeignPtrToPtr )
 88 import System.IO.Unsafe          ( unsafePerformIO )
 89 #else
 90 import Foreign ( unsafeForeignPtrToPtr, unsafePerformIO )
 91 #endif
4

5 回答 5

11

由于某种原因,MIN_VERSION_base宏没有得到扩展,因此预处理器看到了MIN_VERSION_base(4,4,0)它当然无法处理的情况。我还没有找到宏没有展开的原因,但解决方法是

  1. 改为安装 zlib-0.5.3.1
  2. 解压压缩包并编辑Codec/Compression/Zlib/Stream.hsc以删除有问题的宏(您使用的是 7.0.3,因此您的基本版本是 4.3.1.0,您可以将宏替换为 0)

编辑:经过一番探索,我发现要隐藏这些不打算处理的预处理器指令,hsc2hs它们必须被一个额外的“#”屏蔽。错误报告正在进行中。

于 2012-01-22T19:17:07.710 回答
10

在 Ubuntu 上,我用

sudo apt-get install libghc-zlib-dev  libghc-zlib-bindings-dev

(我不知道是否需要两者。)

于 2012-01-27T09:00:52.447 回答
6

我仍然在 GHC 7.8.4 上使用 haskell 包 zlib-0.5.4.2 遇到这个问题。我认为问题是图书馆的非标准位置。我通过手动安装 zlib 1.2.8 解决了这个问题,然后执行:

cabal install zlib --extra-lib-dirs=/usr/local/lib --extra-include-dir=/usr/local/include
于 2015-01-21T01:42:44.293 回答
2

最可能的原因是您的机器上缺少 zlib C 库头文件。您可能会尝试使用 Arch Linux “Haskell Platform” 或haskell-zlib包,它们会为您解决 C 依赖关系。

于 2012-01-22T14:49:04.427 回答
2

我不明白这个错误,但它也发生在我今天早些时候尝试使用 GHC 7.4 安装 Agda 2.3 时。#agda 的 Saizan 建议我试试

cabal unpack zlib
cd zlib-0.5.3.2/
runghc Setup configure --user; runghc Setup build; runghc Setup install

这被证明是有效的。但我仍然对真正的问题一无所知。

尽管如此,当它奏效时,我想我会分享。

于 2012-01-22T17:38:25.120 回答