2010-04-28 10 views
6

Ho installato di recente (dagli installer binari) GHC 6.12 e Haskell Platform 2010.1.0.1 sul mio MacBook Intel con OS X 10.5.8 e, inizialmente, tutto ha funzionato correttamente. Modifica: Ho dovuto installare cabal, alex e happy dalla fonte, ma dopo che, tutto sembrava funzionare correttamente. Tuttavia, ho scoperto che se uso cabal install installare un pacchetto che dipende da una libreria MacPorts (esempio, cabal install --extra-lib-dirs=/opt/local/lib --extra-include-dirs=/opt/local/include gd), le cose funzionano bene in GHCi, ma se provo a compilare, ottengo l'erroreGHC 6.12 e 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 

Dopo aver cercato su Google, ho trovato a long Haskell-cafe thread discutendo di questo problema. Il risultato sembra essere quello MacPorts installs an updated version of libiconv e l'interfaccia binaria è leggermente diversa dalla versione inclusa nel sistema. Di conseguenza, se provi a collegarti a una qualsiasi libreria MacPorts, anche la libiconv di MacPorts viene collegata; e poiché la libreria di base è stata creata per collegarsi a una versione diversa di libiconv, le cose si interrompono. Ho provato setting LD_LIBRARY_PATH and DYLD_LIBRARY_PATH e aggiungo altre bandiere per provare a farlo visualizzare di nuovo a /usr/lib (ad esempiocabal install --extra-lib-dirs=/opt/local/lib --extra-include-dirs=/opt/local/include --extra-lib-dirs=/usr/lib --extra-include-dirs=/usr/include gd), ma nessuno dei due ha funzionato. La disinstallazione di MacPorts libiconv non è realmente un'opzione, dal momento che ho un sacco di porte installate che dipendono da esso --- incluse alcune porte a cui Haskell deve collegarsi, come gd2.

Da quello che ho visto online, il risultato sembra essere "sei disossato": non puoi collegarti a nessuna libreria MacPorts mentre compili con GHC, e non sembra esserci una soluzione. Tuttavia, quella discussione era dalla fine del 2009, quindi immagino ci sia una possibilità che qualcuno abbia una soluzione, una soluzione alternativa, un hack ridicolo ... qualsiasi cosa, davvero. Quindi: qualcuno sa come ottenere GHC 6.12 per collegarsi al sistema libiconv nello stesso momento in cui si collega alle librerie da MacPorts? Oppure, in caso contrario, un modo per rendere il collegamento non si interrompe in qualche altro modo intelligente?

+0

avete installato la piattaforma Haskell binario, o le MacPorts costruire? O la build di origine? –

+0

Programmi di installazione binari sia per GHC che per la piattaforma Haskell. Modificherò la domanda per riflettere questo. –

+0

Sto ottenendo esattamente questo problema con un GHC 6.12.3 che ho creato dal sorgente. –

risposta

9

Stavo ricevendo lo stesso errore su MacOSX 10.5.8 quando ho installato haskell-platform-2010.1.0.1-i386 e ho tentato di compilare un programma haskell. La soluzione per me era aggiungere l'opzione "-L/usr/lib" a ghc quando si compilava il programma. Credo che questo sia riuscito a far sì che il linker prima cercasse/usr/lib per la libreria iconv che ha risolto il problema per me.

+1

Avrei potuto giurare di aver provato questo, ma quando stavo compilando qualcosa usando GTK oggi e ottenendo lo stesso errore, ho pensato di dargli una possibilità. Ecco, ha funzionato! Grazie! –

+1

Come si ottiene questo quando si installano cose con la cabala? –

+5

Un semplice "extra-lib-dirs:/usr/lib" in ~/.cabal/config si è occupato di questo per me. –

0

Questo è strano: afaik Platform 2010.1.0.1 does not work on OS X 10.5.8, questo è stato segnalato e verificato da diverse persone incluso me stesso, e più interessante - by you!

+2

Questo bug indica che * cabal * non funziona --- per me, almeno, GHC e GHCi hanno funzionato bene. Ho dovuto installare 'cabal',' alex' e 'happy' dalla sorgente; una volta fatto ciò, tutto ha funzionato (tranne per questo errore di libiconv). Buona cattura, però. –

1

Ho risolto i miei problemi disinstallando MacPorts. Probabilmente potresti cavartela semplicemente disinstallando la versione MacPorts di libiconv e qualsiasi libreria che dipende da esso.

+1

Questo ha funzionato anche per me. HomeBrew sembra essere una buona alternativa a MacPorts. –

1

Sono un po 'vergogna di ammetterlo, ma ho avuto un certo successo con incantesimi come il seguente:

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

Forse questo può essere migliore cabal configure --extra-lib-dir=/usr/lib Non risolve il problema su OSX Mountain Lion

0

ho fissato da:

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