2010-04-28 61 views
6

我最近在運行OS X 10.5.8的英特爾MacBook上安裝了(從二進制安裝程序)GHC 6.12和Haskell Platform 2010.1.0.1,最初,一切正常。 編輯:我不得不從源安裝cabal,alexhappy,但,一切似乎工作正常。然而,我發現,如果我用cabal install安裝一個軟件包依賴於一個MacPorts的庫(cabal install --extra-lib-dirs=/opt/local/lib --extra-include-dirs=/opt/local/include gd),東西GHCI做工精細,但如果我嘗試編譯,我得到的錯誤GHC 6.12和MacPorts

Linking test ... 
Undefined symbols: 
    "_iconv_close", referenced from: 
     _hs_iconv_close in libHSbase-4.2.0.0.a(iconv.o) 
    "_iconv", referenced from: 
     _hs_iconv in libHSbase-4.2.0.0.a(iconv.o) 
    "_iconv_open", referenced from: 
     _hs_iconv_open in libHSbase-4.2.0.0.a(iconv.o) 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

谷歌搜索後,我發現a long Haskell-cafe thread討論這個問題。結果似乎是MacPorts installs an updated version of libiconv,二進制接口與系統中包含的版本略有不同。因此,如果您嘗試鏈接任何MacPorts庫,MacPorts libiconv也會鏈接;並且由於基礎庫是爲了鏈接到不同版本的libiconv而構建的,所以事情就會崩潰。我已嘗試setting LD_LIBRARY_PATH and DYLD_LIBRARY_PATH並添加更多標記以嘗試再次查看/usr/lib,例如cabal install --extra-lib-dirs=/opt/local/lib --extra-include-dirs=/opt/local/include --extra-lib-dirs=/usr/lib --extra-include-dirs=/usr/include gd),但都無效。卸載MacPorts libiconv並不是一個真正的選擇,因爲我有一堆依賴於它的端口---包括一些我希望Haskell鏈接的端口,如gd2

從我在網上看到的結果看起來確實像是「你被綁架了」:在編譯GHC時無法鏈接任何MacPorts庫,似乎也沒有解決方案。不過,該線程是從2009年底開始的,所以我認爲有人有機會得到解決方案,解決方法,可笑的黑客......任何事情,真的。所以:是否有人知道如何讓GHC 6.12鏈接到系統libiconv,同時鏈接到來自MacPorts的庫?或者,如果沒有這樣做,一種方法使鏈接不以其他一些聰明的方式打破

+0

你安裝二進制哈斯克爾平臺,還是MacPorts的建立?或者源代碼構建? – 2010-04-28 02:48:59

+0

GHC和Haskell平臺的二進制安裝程序。我將編輯該問題以反映這一點。 – 2010-04-28 03:18:53

+0

我從源代碼構建的GHC 6.12.3中遇到了這個問題。 – 2010-07-04 18:21:22

回答

9

當我安裝haskell-platform-2010.1.0.1-i386並嘗試編譯haskell程序時,我在MacOSX 10.5.8上遇到同樣的錯誤。對我來說,解決方案是在編譯程序時向ghc添加選項「-L/usr/lib」。我相信這設法讓鏈接器首先搜索iconv庫的/ usr/lib,這爲我解決了問題。

+1

我可以發誓我試過這個,但是當我今天編譯一些使用GTK的東西並且得到相同的錯誤時,我想我會試試它。瞧,它的工作!謝謝! – 2010-06-29 21:34:09

+1

當你用cabal安裝東西時,你如何完成這項工作? – 2010-07-04 18:27:41

+5

〜/ .cabal/config中的一個簡單的「extra-lib-dirs:/ usr/lib」已經爲我處理了。 – 2010-07-28 14:38:15

0

這很奇怪:afaik Platform 2010.1.0.1 does not work on OS X 10.5.8,這已經被包括我自己在內的幾個人報告和驗證過,更有趣的是 - by you

+2

該錯誤表明* cabal *不起作用---對我而言,至少GHC和GHCi工作正常。我不得不從源碼安裝'cabal','alex'和'happy';一旦我這樣做,一切正常(除了這個libiconv錯誤)。不錯,但是。 – 2010-04-28 17:16:56

1

我讓我的問題通過卸載MacPorts消失。只需卸載libiconv的MacPorts版本和依賴它的任何庫即可。

+1

這也適用於我。 HomeBrew似乎是MacPorts的一個很好的選擇。 – 2010-11-06 13:16:27

1

我有點羞於承認這一點,但我已經有一些成功通過類似以下的咒語:

LIBRARY_PATH=/usr/lib:/opt/local/lib cabal install --ghc-option="-L/usr/lib" SDL-gfx 
0

也許,這可能是更好的 cabal configure --extra-lib-dir=/usr/lib 它解決在OSX山獅的問題

0

我固定的:

stack build --ghc-options "-L/usr/lib"