GHC的zlib生成错误 [英] zlib build error with GHC

查看:163
本文介绍了GHC的zlib生成错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述




  • Arch Linux(3.0-ARCH内核)

  • GHC 7.0.3
  • cabal-install 0.10.2

  • Cabal库1.10.1.0



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

      $ cab $ install zlib 

    我得到以下输出:

     解决依赖关系... 
    正在下载zlib-0.5.3.2 ...
    配置zlib-0.5.3.2 ...
    预处理库zlib-0.5.3.2 ...
    Stream.hsc:86:21:错误:在令牌之前缺少二元运算符(
    Stream.hsc:在函数'main'中:
    Stream。 (
    Stream.hsc:86:21:错误:缺少令牌之前的二元运算符(
    编译dist / build / Codec / Compression /Zlib/Stream_hsc_make.c失败(退出代码1)
    命令是:/ usr / bin / gcc -c dist / build / Codec / Compression / Zlib / Stream_hsc_make.c -o dist / build / Codec / Co mpression / 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:错误:某些软件包未能安装:
    zlib-0.5.3.2在构建阶段失败。例外情况是:
    ExitFailure 1

    任何人都可以看到这个构建错误吗? / p>




    编辑:以下是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导入外部(unsafeForeignPtrToPtr,unsafePerformIO)
    91 #endif


    解决方案

    预处理器看到条件 MIN_VERSION_base(4,4,0)它当然不能处理。我还没有发现为什么这个宏没有被扩展,但是变通方法是安装zlib-0.5.3.1而不是


    1. >
    2. 解开压缩包并编辑 Codec / Compression / Zlib / Stream.hsc 以移除违规宏(您正在使用7.0.3,所以你的基本版本是4.3.1.0,你可以用0替换宏)

    编辑:我发现为了隐藏这些预处理器指令,这些指令并不适用于 hsc2hs 处理,它们必须被一个额外的'#'掩盖。错误报告正在进行中。


    I'm using a VM with the following configuration:

    • Arch Linux (3.0-ARCH kernel)
    • GHC 7.0.3
    • cabal-install 0.10.2
    • Cabal library 1.10.1.0

    When I try to build zlib using cabal...

    $ cabal install zlib
    

    I get the following output:

    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
    

    Can anyone shed some light on this build error?


    Edit: Here's a snippet from Stream.hsc with line numbers:

     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
    

    解决方案

    For some reason, the MIN_VERSION_base macro doesn't get expanded, thus the preprocessor sees the condition MIN_VERSION_base(4,4,0) which it of course cannot handle. I've not yet found out why the macro isn't expanded, but workarounds are

    1. install zlib-0.5.3.1 instead
    2. unpack the tarball and edit Codec/Compression/Zlib/Stream.hsc to remove the offending macro (you're using 7.0.3, so your base version is 4.3.1.0, you can replace the macro with 0)

    Edit: After poking around a bit, I found out that to hide these preprocessor directives, which aren't intended for hsc2hs to process, they have to be masked by an extra '#'. Bug report underway.

    这篇关于GHC的zlib生成错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆