2012-01-22 71 views
3

我正在爲安裝gtk2hs和相關工具包,繼this process, tested with GHC 7.2.2,但我碰到了一點麻煩。我使用的是Mac OS X Lion,通過自制軟件安裝了glib 2.30.2,以及ghc 7.4(聖誕節前的候選版本)。我想我的gcc版本可能是相關glib gremlin與GHC 7.4

bash-3.2$ gcc --version 
i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00) 

試圖期間cabal install gtk安裝glib依賴時,麻煩來了。我試了一個單獨的cabal unpack glibcabal install,我得到了這個指針偏執狂的抱怨。

bash-3.2$ cabal install 
Resolving dependencies... 
Configuring glib-0.12.2... 
Building glib-0.12.2... 
Preprocessing library glib-0.12.2... 
System/Glib/hsgclosure.c: In function 'gtk2hs_closure_marshal': 

System/Glib/hsgclosure.c:110:0: 
    warning: passing argument 1 of 'rts_evalIO' from incompatible pointer type 

System/Glib/hsgclosure.c:110:0: 
    error: void value not ignored as it ought to be 

相關文件的相關線上

cap=rts_evalIO(CAP rts_apply(CAP (HaskellObj)runIO_closure, call),&ret); 

,但我沒有專業知識來解釋。

我在reddit discussion的評論中問過同樣的問題,這首先導致我的過程,但我想我也可能在這裏尋求智慧。

在設置的早些時候,GHC 7.4是否改變了這種事情的方式,或者更有可能其他事情被打破?這不是明顯的this problem,但在這個層面上,對我來說很少是顯而易見的。我沒有一個好的心理模型來說明發生了什麼。

我會很感激任何光棚。

回答

3

是的,GHC 7.4改變了一些東西。 rts_evalIO被定義在包括/ RtsAPI.h,以前是

Capability * 
rts_evalIO (Capability *, HaskellObj p, /*out*/HaskellObj *ret); 

現在,在7.4,它是

void rts_evalIO (/* inout */ Capability **, 
       /* in */ HaskellObj p, 
       /* out */ HaskellObj *ret); 

其它rts_eval*功能類似地改變。簡而言之,glib-0.12.2不會以7.4構建。要麼自己動手編譯(我懷疑是非常平凡的),要麼等待並使用7.2.2,直到發佈一個與7.4一起工作的新的glib。

+0

感謝確認,這是一個嚴重的變化。我可能需要做相當多的學習,然後才能自己解決這個問題。我想我會等。 – pigworker

7

的darcs獲得http://code.haskell.org/gtk2hs/

從日誌:

Thu Jan 19 22:50:06 PST 2012 Duncan Coutts <[email protected]> 
    * Fix the type generator for GHC 7.4 
    GHC 7.4 is stricter about FFI imports with newtypes, the newtype 
    constructor must be visible at the point of import. 

Thu Jan 19 22:42:43 PST 2012 Duncan Coutts <[email protected]> 
    * Fix cairo for GHC 7.4 
    Changes in Num type class 

Thu Jan 19 22:40:20 PST 2012 Duncan Coutts <[email protected]> 
    * Fix glib for change in RTS API in GHC 7.4