2012-01-22 3 views
13

Я использую VM со следующей конфигурацией:Zlib с GHC

  • Arch Linux (3,0-ARCH ядро)
  • GHC 7.0.3
  • междусобойчик установке 0.10.2
  • библиотека Cabal 1.10.1.0

Когда я пытаюсь построить 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 

Может кто-нибудь пролить некоторый свет на эту ошибку сборки?


Edit: Вот отрывок из 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 

ответ

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)

Edit: После ковыряться немного, я обнаружил, что, чтобы скрыть эти директивы препроцессора, которые Арен» t, предназначенные для обработки hsc2hs, они должны быть замаскированы дополнительным «#». Отчет об ошибках продолжается.

+0

Спасибо! Обновление предложенной Stream.hsc устраняет ошибку. –

+0

Ха, это смешно, я столкнулся с такой же проблемой сегодня :) – Phyx

+1

@ Найденное надлежащее решение для Phyx, не должно быть долго, пока оно не достигнет хака. –

2

Наиболее вероятной причиной является то, что заголовки библиотеки Zlib C не хватает на вашей машине. Вместо этого вы можете использовать пакеты Arch Linux «Haskell Platform» или haskell-zlib, которые разрешают вам зависимости C.

+0

Благодарим за предложения. К сожалению, оба пакета ** extra/haskell-platform ** (2011.2.0.0-4) и ** extra/haskell-zlib ** (0.5.3.1-2.1) уже установлены. На самом деле все, что я сделал на виртуальной машине, - это sudo pacman -S haskell-platform && cabal install virthualenv && mkdir -p src/proj && cd src/proj && virthualenv && источник .virthualenv/bin/activate && cabal install yesod * *. Конструкция Yesod нарушена из-за ошибки zlib. –

+0

У меня есть то же самое сообщение, и у меня есть заголовки библиотеки zlib C. Добавление недостающего # заставило его работать. –

2

Я не понимаю эту ошибку, но это случилось и с нами ранее, при попытке установить 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 

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

По-прежнему, поскольку это сработало, я думал, что поделюсь.

+0

Благодарим вас за обмен. Я выполнил предложенные команды, но получил ту же ошибку при выполнении ** runghc Setup build **. Я обновил свой вопрос, чтобы включить фрагмент из Stream.hsc. –

+1

+1 потому что это решение работает * после * обновления Stream.hsc, как было предложено Даниэлем Фишером –

+0

@JonNadal, ответ нужно обновить, чтобы указать, что вы должны отредактировать его перед запуском? – poolie

10

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

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

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

+1

работал для меня на Debian Wheezy тоже – HoboBen

+0

Вы спаситель. Это волшебное заклинание сработало для меня. Я на Зорине 12.1 – missingfaktor

5

Я все еще сталкивается с этим пакет 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 
+0

Это исправило это для меня. Благодаря! В частности, они могут быть добавлены в '~/.cabal/config'. –