2011-02-01 27 views
10

Ho un problema con ghci + cairo su Windows. Quando provo a caricare, per esempio come questo "cairo ghci -package" viene a mancare con il seguente errore: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' 

Anche i programmi più semplici non funzionano in modalità interattiva, come ad esempio 'Text.hs' che viene fornito con il pacchetto cairo. Comunque compilato con 'ghc --make' tutto funziona come previsto, quindi non è un problema "dll mancante" - tutto è a posto.

Ho usato 'filemon' per vedere cosa carica "ghci" e nel registro posso vedere 'libcairo-2.dll' (e questa libreria ha il simbolo '_cairo_surface_destroy' definito) che viene trovato e caricato con successo, quindi non capisco davvero - cosa vuole di più?

+0

Forse come un problema di "threading"? C'è stato un recente thread Haskell-cafe sulla libreria grafica SOE che mostra un comportamento simile "Codice da Haskell School of Expression Hanging" - http://www.haskell.org/pipermail/haskell-cafe/2011-January/088697.html. Mi dispiace, non conosco la risoluzione. –

+0

Per caso libcairo-2.dll si trova in una posizione con spazi nel percorso? Potresti anche postare quale versione di ghci stai usando (sembra comunque un bug del linker)? –

+1

Potrebbe essere una mancata corrispondenza 'stdcall' /' ccall'. Il nome del simbolo nella DLL ha un suffisso come '@ 4'? –

risposta

0

Eseguire controllo GHC-pkg per vedere se è compatibile

+0

È coerente. – dilettant

2

Ho il sospetto che si sta eseguendo in molti dei problemi che ho appena fatto.

Ho provato a fare qualcosa di recente con Haskell e ZeroMQ su Windows. GHC funziona su Windows, ZeroMQ ha una porta MingW32 e c'è un pacchetto standard ZeroMQ Cabal, quindi ho pensato che potesse funzionare.

Tuttavia:

  • GHC ha solo un supporto parziale per il linking dinamico su Windows. Vedi here.
  • Il pacchetto ZeroMQ Cabal dipende dalla versione statica di libzmq.
  • GHC su Windows utilizza le convenzioni MingW32 per le sue librerie e le DLL.
  • ZeroMQ crea solo un dinamico .dll nella porta MingW32, non un archivio statico .a.

Non sono riuscito a far combaciare tutti i pezzi, quindi nessuna codifica ZeroMQ basata su Haskell nella mia finestra di Windows.

Problemi correlati