2010-04-28 25 views
6

Niedawno zainstalowałem (z binarnych instalatorów) GHC 6.12 i Haskell Platform 2010.1.0.1 na moim Intel MacBook z systemem OS X 10.5.8 i początkowo wszystko działało dobrze. Edytuj: Musiałem zainstalować cabal, alex i happy od źródła, ale po , że, wszystko wydawało się działać dobrze. Jednak odkryłem, że jeśli używam cabal install zainstalować pakiet, który zależy od biblioteki DarwinPorts (np, cabal install --extra-lib-dirs=/opt/local/lib --extra-include-dirs=/opt/local/include gd), wszystko działa dobrze w GHCi, ale gdy próbuję skompilować, pojawia się błądGHC 6.12 i 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 

Po przejściu przez Googling, znalazłem a long Haskell-cafe thread omawiający ten problem. Wydaje się, że wynik jest następujący: MacPorts installs an updated version of libiconv, a interfejs binarny jest nieco inny niż wersja dołączona do systemu. W związku z tym, jeśli spróbujesz połączyć się z dowolną biblioteką MacPorts, biblioteka plików MacPorts zostanie również połączona; a ponieważ biblioteka bazowa została zbudowana w celu połączenia z inną wersją libiconv, rzeczy się psują. Próbowałem już setting LD_LIBRARY_PATH and DYLD_LIBRARY_PATH i dodałem więcej flag, aby spróbować ponownie uzyskać /usr/lib (, np.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), ale żaden z nich nie zadziałał. Odinstalowanie komputera MacPorts libiconv nie jest tak naprawdę opcją, ponieważ mam zainstalowane kilka portów, które zależą od niego - łącznie z niektórymi portami, do których Haskell ma prowadzić, na przykład gd2.

Z tego, co widziałem online, wynik naprawdę wydaje się być "jesteś bez kości": nie można połączyć z żadną biblioteką MacPorts podczas kompilacji z GHC, i nie wydaje się, aby było to rozwiązanie. Jednak ten wątek istniał od końca 2009 roku, więc sądzę, że jest szansa, że ​​ktoś ma rozwiązanie, obejście, śmieszny hack ... cokolwiek, naprawdę. Więc: czy ktoś wie, jak uzyskać GHC 6.12, aby połączyć się z systemem libiconv w tym samym czasie, w którym łączy się z bibliotekami MacPorts? A może, w przeciwnym razie, łączenie nie łamie w jakiś inny sprytny sposób?

+0

czy zainstalować binarną Haskell Platform, lub MacPorts budować? Lub kompilacja źródłowa? –

+0

Instalatory binarne dla GHC i platformy Haskell. Będę edytować pytanie, aby to odzwierciedlić. –

+0

Otrzymuję właśnie ten problem z GHC 6.12.3, który stworzyłem ze źródła. –

Odpowiedz

9

Otrzymałem ten sam błąd na MacOSX 10.5.8, kiedy zainstalowałem program haskell-platforma-2010.1.0.1-i386 i próbowałem skompilować program haskell. Rozwiązaniem było dla mnie dodanie opcji "-L/usr/lib" do ghc podczas kompilacji programu. Sądzę, że udało się uzyskać linker do pierwszego wyszukiwania/usr/lib dla biblioteki iconv, która rozwiązała problem dla mnie.

+1

Mogłem przysiąc, że próbowałem tego, ale kiedy kompilowałem coś przy użyciu GTK dzisiaj i otrzymałem ten sam błąd, pomyślałem, że dam mu szansę. Lo i oto, zadziałało! Dziękuję Ci! –

+1

Jak to osiągnąć, instalując rzeczy z kabałą? –

+5

Zajęło się dla mnie proste "dodatkowe lib-dirs:/usr/lib" w ~/.cabal/config. –

0

To jest dziwne: afaik Platform 2010.1.0.1 does not work on OS X 10.5.8, zostało to zgłoszone i zweryfikowane przez kilka osób, w tym przeze mnie, a co ciekawsze - przez by you!

+2

Ten błąd wskazuje, że * cabal * nie działa - przynajmniej dla mnie, GHC i GHCi działały dobrze. Musiałem zainstalować 'cabal',' alex' i 'happy' ze źródła; kiedy to zrobiłem, wszystko działało (z wyjątkiem tego błędu libiconv). Jednak dobry połów. –

1

Rozwiązałem problemy, odinstalowując system MacPorts. Prawdopodobnie możesz uciec po prostu odinstalowaniu wersji biblioteki libiconv MacPorts i dowolnej biblioteki, która od tego zależy.

+1

To również zadziałało. HomeBrew wydaje się być dobrą alternatywą dla MacPorts. –

1

jestem nieco wstydzi się przyznać, ale miałem pewne sukcesy z zaklęciami, jak następuje:

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

Być może to być lepiej cabal configure --extra-lib-dir=/usr/lib To nie rozwiąże problemu na OSX Mountain Lion

0

I ustalony przez:

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