2012-01-22 24 views
13

estoy usando una máquina virtual con la siguiente configuración:zlib con GHC

  • Arch Linux (kernel 3.0-ARCH)
  • GHC 7.0.3
  • Cabal-instalar 0.10.2
  • biblioteca Cabal 1.10.1.0

Cuando trato de instalar zlib usando Cabal ...

$ cabal install zlib 

me sale el siguiente resultado:

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 

¿Alguien puede arrojar algo de luz sobre este error de generación?


Editar: He aquí un fragmento de Stream.hsc con números de línea:

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 

Respuesta

11

Por alguna razón, la macro MIN_VERSION_base no se expande, por lo tanto el preprocesador ve la condición MIN_VERSION_base(4,4,0) que por supuesto no puede manejar. Yo aún no he descubierto la razón por la macro no se expande, pero son soluciones

  1. instalar zlib-0.5.3.1 lugar
  2. descomprimir el archivo comprimido y editar Codec/Compression/Zlib/Stream.hsc para eliminar la macro infractor (que está utilizando 7.0.3, por lo que su versión básica es 4.3.1.0, puede reemplazar la macro con 0)

Editar: Después de hurgar un poco, descubrí que para ocultar estas directivas del preprocesador, que aren' Diseñados para hsc2hs, deben enmascararse con un '#' adicional. Informe de error en curso.

+0

¡Gracias! La actualización de Stream.hsc como se sugirió resolvió el error. –

+0

Hah, es gracioso, me encontré con el mismo problema hoy en día :) – Phyx

+1

@Phyx solución adecuada, no debería tardar mucho en llegar a hackage. –

2

La razón más probable es que las cabeceras de la biblioteca zlib C faltan en su máquina. En su lugar, puede tratar de usar los paquetes de Arch Linux "Haskell Platform" o haskell-zlib, que resuelven las dependencias de C por usted.

+0

Gracias por las sugerencias. Lamentablemente, ya están instalados los paquetes ** extra/haskell-platform ** (2011.2.0.0-4) y ** extra/haskell-zlib ** (0.5.3.1-2.1). En realidad, todo lo que hice en la máquina virtual es ** sudo pacman -Shack-platform && cabal install virthualenv && mkdir -p src/proj && cd src/proj && virthualenv && source .virthualenv/bin/activate && cabal install yesod * *. La construcción yesod se rompió debido al error zlib. –

+0

Recibí exactamente el mismo mensaje, y tengo los encabezados de biblioteca de zlib C presentes. Agregar el # faltante lo hizo funcionar. –

2

No entiendo este error, pero me sucedió también hoy al tratar de instalar Agda 2.3 usando GHC 7.4. Saizan de #agda sugirió que intente

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

Esto resultó efectivo. Pero todavía estoy en la oscuridad sobre cuál es realmente el problema.

Aún así, como funcionó, pensé que lo compartiría.

+0

Gracias por compartir. Ejecuté los comandos sugeridos pero obtuve el mismo error al ejecutar ** build de configuración de runghc **. Actualicé mi pregunta para incluir un fragmento de Stream.hsc. –

+1

+1 porque esta solución funciona * después de * actualizar Stream.hsc como sugiere Daniel Fischer –

+0

@JonNadal ¿necesita la respuesta que se actualice para indicar que debe editarla antes de ejecutar? – poolie

10

En Ubuntu, me fijo (o en realidad, evitar) un error similar con

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

(no sé si ambos son necesarios.)

+1

funcionó para mí en Debian Wheezy también – HoboBen

+0

Eres un salvador. Este encantamiento mágico funcionó para mí. Estoy en Zorin 12.1 – missingfaktor

5

todavía estoy encontrando esto con el haskell package zlib-0.5.4.2 en GHC 7.8.4. Creo que el problema es una ubicación no estándar de la biblioteca. Lo resolví instalando a mano zlib 1.2.8 y luego hacer:

cabal install zlib --extra-lib-dirs=/usr/local/lib --extra-include-dir=/usr/local/include 
+0

Eso lo solucionó para mí. ¡Gracias! En particular, estos pueden agregarse en '~/.cabal/config'. –