2011-02-01 71 views
10

我在windows上遇到ghci + cairo問題。當我嘗試加載,例如像這樣的「ghci的-package開羅」失敗,出現以下錯誤: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' 

即使是最簡單的程序不會在交互模式下工作,例如像「Text.hs」那與開羅包一起來。然而編譯'ghc --make'一切都如預期的那樣工作,所以它不是一個「缺失的dll」問題 - 一切都已到位。

我用'filemon'來查看「ghci」加載的內容,並在日誌中可以看到'libcairo-2.dll'(並且此庫有'_cairo_surface_destroy'符號定義)被找到並加載成功,所以我不用真的不明白 - 它還想要什麼?

+0

也許它是一個'線程'問題?最近有一個關於SOE圖形庫的Haskell咖啡廳線程展示類似於「Haskell School of Expression Hanging的代碼」 - http://www.haskell.org/pipermail/haskell-cafe/2011-January/088697.html。對不起,我不知道這個決議。 – 2011-02-01 12:28:28

+0

任何機會是libcairo-2.dll在路徑名中的空格位置?你也可以發佈你正在使用哪個版本的ghci(在任何情況下,這看起來像一個鏈接器錯誤)? – 2011-02-01 16:46:33

回答

0

請運行GHC-PKG檢查,看它是否是一致的

2

我懷疑你正在運行成許多的我只是做了這些問題。

我試着在窗口上最近用Haskell和ZeroMQ做些事情。 GHC在Windows上運行,ZeroMQ有一個MingW32端口,並且有一個標準的ZeroMQ Cabal軟件包,所以我認爲這是可行的。

但是:

  • GHC只適用於Windows動態鏈接部分支持。請參閱here
  • ZeroMQ Cabal包依賴於libzmq的靜態版本。
  • Windows上的GHC使用MingW32約定爲它的庫和dll's。
  • ZeroMQ僅在其MingW32端口中構建動態.dll,而不是.a靜態存檔。

我不能把所有的東西放在一起,所以在我的windows系統上沒有基於Haskell的ZeroMQ編碼。