2012-01-22 39 views
13

Tôi đang sử dụng một máy ảo với cấu hình sau:zlib build lỗi với GHC

  • Arch Linux (3.0-ARCH kernel)
  • GHC 7.0.3
  • cabal cài đặt 0.10.2
  • thư viện Cabal 1.10.1.0

Khi tôi cố gắng xây dựng zlib sử dụng cabal ...

$ cabal install zlib 

tôi nhận được kết quả như sau:

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 

bất cứ ai có thể làm sáng tỏ về xây dựng này lỗi?


Edit: Dưới đây là một đoạn trích từ Stream.hsc với số dòng:

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 

Trả lời

11

Vì một lý do nào đó, macro MIN_VERSION_base không được mở rộng, do đó bộ tiền xử lý nhìn thấy điều kiện MIN_VERSION_base(4,4,0) mà nó tất nhiên không thể xử lý. Tôi đã chưa phát hiện ra lý do tại sao vĩ mô không được mở rộng, nhưng cách giải quyết là

  1. cài đặt zlib-0.5.3.1 thay vì
  2. giải nén tarball và chỉnh sửa Codec/Compression/Zlib/Stream.hsc để loại bỏ các vi phạm vĩ mô (bạn đang sử dụng 7.0.3, vì vậy phiên bản cơ sở của bạn là 4.3.1.0, bạn có thể thay thế vĩ mô với 0)

Edit: Sau khi chọc xung quanh một chút, tôi phát hiện ra rằng để ẩn các chỉ thị tiền xử lý, mà aren' t dự định cho hsc2hs để xử lý, chúng phải được che dấu bằng một '#' bổ sung. Báo cáo lỗi đang được tiến hành.

+0

Cảm ơn! Cập nhật Stream.hsc như đề xuất đã giải quyết lỗi. –

+0

Hah, thật buồn cười, tôi đã gặp phải vấn đề tương tự như ngày hôm nay :) – Phyx

+1

@Phyx giải pháp thích hợp được tìm thấy, không nên lâu cho đến khi nó đạt đến hackage. –

2

Lý do phần nhiều là do các tiêu đề thư viện zlib C đang thiếu trên máy tính của bạn. Thay vào đó, bạn có thể thử sử dụng gói Arch Linux "Haskell Platform" hoặc haskell-zlib, giải quyết các phụ thuộc C cho bạn.

+0

Cảm ơn bạn đã đề xuất. Thật không may, cả gói ** extra/haskell-platform ** (2011.2.0.0-4) và ** extra/haskell-zlib ** (0.5.3.1-2.1) đã được cài đặt. Thực sự tất cả những gì tôi đã thực hiện trong VM là ** sudo pacman -S haskell-platform && cabal install virthualenv && mkdir -p src/proj && cd src/proj && virthualenv && source .virthualenv/bin/activate && cabal install yesod * *. Việc xây dựng yesod đã phá vỡ do lỗi zlib. –

+0

Tôi nhận được cùng một thông điệp chính xác và tôi có các tiêu đề thư viện zlib C hiện diện. Thêm số thiếu # làm cho nó hoạt động. –

2

Tôi không hiểu lỗi này, nhưng nó đã xảy ra với tôi cũng sớm hơn hôm nay trong khi cố gắng cài đặt Agda 2.3 bằng GHC 7.4. Saizan từ #agda đã đề xuất rằng tôi thử

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

Điều này tỏ ra hiệu quả. Nhưng tôi vẫn còn trong bóng tối về những gì thực sự là vấn đề.

Tuy nhiên, vì nó hoạt động, tôi nghĩ tôi muốn chia sẻ.

+0

Cảm ơn bạn đã chia sẻ. Tôi chạy các lệnh được đề xuất nhưng có lỗi tương tự khi thực hiện ** runghc Setup build **. Tôi đã cập nhật câu hỏi của mình để bao gồm một đoạn trích từ Stream.hsc. –

+1

+1 vì giải pháp này hoạt động * sau khi * cập nhật Stream.hsc như được đề xuất bởi Daniel Fischer –

+0

@JonNadal câu trả lời cần phải được cập nhật để cho biết bạn nên chỉnh sửa nó trước khi chạy? – poolie

10

Trên Ubuntu, tôi cố định (hoặc thực sự, tránh) một lỗi tương tự với

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

(Tôi không biết nếu cả hai đều cần thiết.)

+1

làm việc cho tôi trên Debian Wheezy quá – HoboBen

+0

Bạn là một vị cứu tinh. Câu thần chú này làm việc cho tôi. Tôi đang ở trên Zorin 12.1 – missingfaktor

5

Tôi vẫn đang gặp phải này với gói haskell zlib-0.5.4.2 trên GHC 7.8.4. Tôi nghĩ vấn đề là một vị trí không chuẩn của thư viện. Tôi đã giải quyết nó bằng cách cài đặt zlib tay 1.2.8 và sau đó thực hiện:

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

Điều đó đã sửa nó cho tôi. Cảm ơn! Đặc biệt, chúng có thể được thêm vào trong '~/.cabal/config'. –

Các vấn đề liên quan