2011-02-01 29 views
10

Tôi gặp sự cố với ghci + cairo trên cửa sổ. Khi tôi cố gắng để tải, ví dụ như thế này "ghci -package cairo" nó không thành công với các lỗi sau:Haskell, GHC, win32, cairo

 
Loading package random-1.0.0.2 ... linking ... done. 
Loading package haskell98 ... linking ... done. 
Loading package syb-0.1.0.2 ... linking ... done. 
Loading package base-3.0.3.2 ... linking ... done. 
Loading package mtl-1.1.0.2 ... linking ... done. 
: C:\Users\alexeys\AppData\Roaming\cabal\cairo-0.12.0\ghc-6.12.3\HScairo-0.12.0.o: unknown symbol `_cairo_surface_destroy' 
Loading package cairo-0.12.0 ... linking ... : unable to load package `cairo-0.12.0' 

Ngay cả các chương trình đơn giản nhất không làm việc trong chế độ tương tác, ví dụ như 'Text.hs' mà đi kèm với gói cairo. Tuy nhiên biên dịch với 'ghc --make' mọi thứ hoạt động như mong đợi, do đó, nó không phải là một vấn đề "thiếu dll" - tất cả mọi thứ được đặt ra.

Tôi đã sử dụng 'filemon' để xem những gì "ghci" tải và trong nhật ký tôi có thể thấy 'libcairo-2.dll' (và thư viện này có '_cairo_surface_destroy' biểu tượng được xác định) được tìm thấy và tải thành công, vì vậy tôi không 't thực sự hiểu - nó muốn gì hơn?

+0

Có thể đó là sự cố 'luồng'? Đã có một chủ đề gần đây của Haskell-cafe về thư viện đồ họa SOE trưng bày hành vi tương tự "Mã từ Trường Biểu thức Treo Haskell" - http://www.haskell.org/pipermail/haskell-cafe/2011-January/088697.html. Tôi xin lỗi tôi không biết độ phân giải. –

+0

Bất kỳ cơ hội nào là libcairo-2.dll ở một vị trí có dấu cách trong tên đường dẫn? Ngoài ra, bạn có thể vui lòng đăng phiên bản ghci nào bạn đang sử dụng (điều này trông giống như lỗi liên kết trong mọi trường hợp) không? –

+1

Có thể là 'stdcall' /' ccall' không khớp. Tên biểu tượng trong tệp DLL có hậu tố như '@ 4' không? –

Trả lời

0

hãy chạy kiểm tra GHC-pkg để xem nếu nó là phù hợp

+0

Là nhất quán. – dilettant

2

tôi nghi ngờ bạn đang chạy vào nhiều vấn đề tôi chỉ làm.

Tôi đã cố gắng thực hiện điều gì đó gần đây với Haskell và ZeroMQ trên cửa sổ. GHC chạy trên Windows, và ZeroMQ có một cổng MingW32, và có một gói ZeroMQ Cabal tiêu chuẩn, vì vậy tôi nghĩ rằng điều này sẽ làm việc.

Tuy nhiên:

  • GHC chỉ có hỗ trợ một phần cho các liên kết động trên Windows. Xem here.
  • Gói cabal ZeroMQ phụ thuộc vào phiên bản tĩnh của libzmq.
  • GHC trên Windows sử dụng các quy ước MingW32 cho thư viện và thư viện của nó.
  • ZeroMQ chỉ tạo một động .dll trong cổng MingW32 của chúng, chứ không phải là một kho lưu trữ tĩnh .a.

Tôi không thể ghép tất cả các mảnh lại với nhau, vì vậy không có hộp ZeroMQ dựa trên Haskell trên hộp cửa sổ của tôi.

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