2011-02-01 16 views
10

Mam problem z ghci + Cairo na windows. Kiedy próbuję załadować, na przykład jak ten „ghci -package Kairze” nie powiedzie się z powodu następującego błędu: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' 

Nawet najprostsze programy nie działają w trybie interaktywnym, jak na przykład „”, który Text.hs pochodzi z pakietem cairo. Jednak kompilowane z "ghc --make" wszystko działa zgodnie z oczekiwaniami, więc nie jest to problem "brakuje dll" - wszystko jest na swoim miejscu.

Użyłem "filemona", aby sprawdzić, co "ghci" ładuje iw logu widzę "libcairo-2.dll" (i ta biblioteka ma zdefiniowany symbol "_cairo_surface_destroy"), które znalazłem i załadowałem pomyślnie, więc Naprawdę rozumiesz - czego więcej chce?

+0

Może to problem "wątków"? Pojawił się ostatnio wątek Haskell-cafe o bibliotece graficznej SOE wykazującej podobne zachowanie "Kod z Haskell School of Expression Hanging" - http://www.haskell.org/pipermail/haskell-cafe/2011- January 088697.html. Przepraszam, nie znam rezolucji. –

+0

Jakimkolwiek przypadkiem jest libcairo-2.dll w miejscu ze spacjami w ścieżce dostępu? Czy mógłbyś również opublikować wersję ghci, której używasz (w każdym razie wygląda na to, że to linker)? –

+1

Może być niedopasowanie "stdcall"/"ccall". Czy nazwa symbolu w bibliotece DLL ma taki sufiks jak '@ 4'? –

Odpowiedz

0

Proszę uruchomić sprawdzanie ghc-PKG aby sprawdzić, czy jest ona zgodna

+0

Czy jest zgodny. – dilettant

2

Podejrzewam używasz do wielu kwestii po prostu nie.

Próbowałem ostatnio zrobić coś z Haskellem i ZeroMQ w oknach. GHC działa w systemie Windows, a ZeroMQ ma port MingW32 i istnieje standardowy pakiet ZeroMQ Cabal, więc pomyślałem, że to zadziała.

Jednakże:

  • GHC ma tylko częściowe wsparcie dla dynamicznego łączenia w systemie Windows. Zobacz here.
  • Pakiet ZeroMQ Cabal zależy od statycznej wersji libzmq.
  • GHC na Windows używa konwencji MingW32 dla swoich bibliotek i bibliotek dll.
  • ZeroMQ buduje tylko dynamiczny .dll w swoim porcie MingW32, a nie archiwum statyczne .a.

Nie mogłem dopasować wszystkich elementów do siebie, więc żadne kodowanie ZeroMQ oparte na Haskell na moim oknie z okienkiem.