13

次の構成の VM を使用しています。

  • Arch Linux (3.0-ARCH カーネル)
  • GHC 7.0.3
  • cabal-install 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. tarballを解凍し、編集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

私はこのエラーを理解していませんが、GHC7.4を使用してAgda2.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 に答える
2

最も可能性の高い理由は、zlib C ライブラリ ヘッダーがマシンにないことです。代わりに、C の依存関係を解決するArch Linux の「Haskell Platform」またはhaskell-zlibパッケージを使用してみてください。

于 2012-01-22T14:49:04.427 に答える