2010-04-28 11 views
6

Ich habe vor kurzem installiert (von den binären Installern) GHC 6.12 und die Haskell Platform 2010.1.0.1 auf meinem Intel MacBook unter OS X 10.5.8, und zunächst alles hat gut funktioniert. Edit: Ich musste cabal, alex und happy aus der Quelle installieren, aber nach , dass, schien alles gut zu funktionieren. Ich entdeckte jedoch, dass, wenn ich cabal install verwenden, um ein Paket zu installieren, die auf einer MacPorts Bibliothek abhängt (zB, cabal install --extra-lib-dirs=/opt/local/lib --extra-include-dirs=/opt/local/include gd), die Dinge in GHCi gut funktionieren, aber wenn ich zu kompilieren versuchen, erhalte ich die FehlerGHC 6.12 und 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 

Nach einigem Googeln fand ich a long Haskell-cafe thread, das dieses Problem besprechend. Das Ergebnis scheint MacPorts installs an updated version of libiconv zu sein, und die binäre Schnittstelle unterscheidet sich geringfügig von der im System enthaltenen Version. Wenn Sie versuchen, eine Verknüpfung zu einer MacPorts-Bibliothek herzustellen, wird die MacPorts-Libiconv ebenfalls verknüpft. und da die Basisbibliothek so erstellt wurde, dass sie mit einer anderen Version von libiconv verlinkt ist, brechen die Dinge ab. Ich habe versucht, setting LD_LIBRARY_PATH and DYLD_LIBRARY_PATH und das Hinzufügen von mehr Flags zu versuchen, es zu /usr/lib wieder zu sehen (z. B.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), aber keiner der beiden funktioniert. Das Deinstallieren der MacPorts libiconv ist nicht wirklich eine Option, da ich eine Reihe von Ports installiert habe, die davon abhängen --- einschließlich einiger Ports, zu denen ich Haskell verbinden möchte, wie gd2.

Von dem, was ich online gesehen habe, scheint das Ergebnis wirklich "du bist boned": Sie können keine Verbindung zu einer MacPorts-Bibliothek während der Erstellung mit GHC herstellen, und es scheint keine Lösung zu geben. Aber dieser Thread war von Ende 2009, also denke ich, dass es eine Chance gibt, dass jemand eine Lösung hat, Workaround, lächerlicher Hack ... alles, wirklich. Also: weiß jemand, wie man GHC 6.12 erhält, um gegen das System libiconv gleichzeitig mit Bibliotheken von MacPorts zu verbinden? Oder, wenn das nicht gelingt, eine Möglichkeit, Verknüpfung nicht in einer anderen cleveren Weise zu brechen?

+0

Haben Sie die binäre Haskell-Plattform installieren oder die MacPorts bauen? Oder die Quelle bauen? –

+0

Binäre Installationsprogramme für GHC und Haskell Platform. Ich werde die Frage bearbeiten, um das zu reflektieren. –

+0

Ich bekomme genau dieses Problem mit einem GHC 6.12.3 Ich habe aus der Quelle gebaut. –

Antwort

9

Ich bekam den gleichen Fehler auf MacOSX 10.5.8, als ich haskell-platform-2010.1.0.1-i386 installierte und versuchte, ein Haskell-Programm zu kompilieren. Die Lösung für mich bestand darin, ghc die Option "-L/usr/lib" hinzuzufügen, wenn das Programm kompiliert wurde. Ich glaube, das schaffte es, den Linker zur ersten Suche/usr/lib für die iconv-Bibliothek zu bringen, die das Problem für mich löste.

+1

Ich hätte schwören können, dass ich das versucht habe, aber als ich heute mit GTK etwas kompilierte und den gleichen Fehler bekam, dachte ich, ich würde es versuchen. Und siehe da, es hat funktioniert! Vielen Dank! –

+1

Wie bewerkstelligen Sie dies, wenn Sie Dinge mit Kabalen installieren? –

+5

Ein einfaches "extra-lib-dirs:/usr/lib" in ~/.cabal/config hat das für mich erledigt. –

0

Das ist seltsam: afaik Platform 2010.1.0.1 does not work on OS X 10.5.8, dies wurde von mehreren Personen einschließlich mir selbst gemeldet und verifiziert, und interessanter - by you!

+2

Dieser Bug zeigt an, dass * cabal * nicht funktioniert --- für mich, mindestens, GHC und GHCi hat gut funktioniert. Ich musste 'cabal',' alex' und 'happy' aus der Quelle installieren; Sobald ich das getan habe, hat alles funktioniert (bis auf diesen libiconv Fehler). Guter Fang, obwohl. –

1

Ich habe meine Probleme durch die Deinstallation von MacPorts behoben. Sie könnten wahrscheinlich damit fertig werden, nur die MacPorts-Version von libiconv und jede Bibliothek, die davon abhängt, zu deinstallieren.

+1

Das hat auch für mich funktioniert. HomeBrew scheint eine gute Alternative zu MacPorts zu sein. –

1

Ich bin ein wenig beschämt, dies zuzugeben, aber ich habe einige Erfolge mit Beschwörungen wie das hatte folgende:

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

Vielleicht cabal configure --extra-lib-dir=/usr/lib besser sein können, es das Problem nicht löst auf OSX Mountain Lion

0

ich reparierte von:

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