Ошибка сборки zlib с GHC - PullRequest
       33

Ошибка сборки zlib с GHC

13 голосов
/ 22 января 2012

Я использую виртуальную машину со следующей конфигурацией:

  • Arch Linux (ядро 3.0-ARCH)
  • GHC 7.0.3
  • cabal-install0.10.2
  • Библиотека Cabal 1.10.1.0

Когда я пытаюсь собрать zlib, используя cabal ...

$ 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

Ответы [ 5 ]

11 голосов
/ 22 января 2012

По какой-то причине макрос 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, они должны быть замаскированы дополнительным символом # , Отчет об ошибке в процессе.

10 голосов
/ 27 января 2012

В Ubuntu я исправил (или действительно избежал) похожую ошибку с

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

(я не знаю, нужны ли оба.)

6 голосов
/ 21 января 2015

Я все еще сталкиваюсь с этим с пакетом haskell zlib-0.5.4.2 на GHC 7.8.4.Я думаю, что проблема заключается в нестандартном расположении библиотеки.Я решил это вручную, установив zlib 1.2.8 и выполнив:

cabal install zlib --extra-lib-dirs=/usr/local/lib --extra-include-dir=/usr/local/include
2 голосов
/ 22 января 2012

Я не понимаю эту ошибку, но она произошла со мной также сегодня ранее, когда я пытался установить Agda 2.3 с помощью GHC 7.4.Сайзан из #agda предложил мне попробовать

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

Это оказалось эффективным.Но я все еще в неведении относительно того, в чем на самом деле проблема.

Тем не менее, когда это сработало, я решил поделиться.

2 голосов
/ 22 января 2012

Наиболее вероятная причина в том, что на вашем компьютере отсутствуют заголовки библиотеки zlib C.Вместо этого вы можете попробовать использовать пакеты Archive Linux "Haskell Platform" или haskell-zlib , которые разрешают зависимости C для вас.

...