2010-04-28 14 views
6

Instalé recientemente (desde los instaladores binarios) GHC 6.12 y el Haskell Platform 2010.1.0.1 en mi MacBook Intel con OS X 10.5.8, y al principio, todo funcionó bien. Editar: Tuve que instalar cabal, alex y happy desde la fuente, pero después de que, todo parecía funcionar bien. Sin embargo, he descubierto que si uso cabal install instalar un paquete que depende de una biblioteca MacPorts (por ejemplo, cabal install --extra-lib-dirs=/opt/local/lib --extra-include-dirs=/opt/local/include gd), las cosas funcionan bien en GHCi, pero si intento compilar, me sale el errorGHC 6.12 y 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 

Después de buscar en Google, encontré a long Haskell-cafe thread discutiendo este problema. El resultado parece ser MacPorts installs an updated version of libiconv, y la interfaz binaria es ligeramente diferente de la versión incluida con el sistema. En consecuencia, si intenta vincularse con cualquier biblioteca de MacPorts, MacPorts libiconv también se vincula; y como la biblioteca base se creó para enlazarse con una versión diferente de libiconv, las cosas se rompen. He intentado setting LD_LIBRARY_PATH and DYLD_LIBRARY_PATH y agregué más banderas para intentar que vuelva a mirar /usr/lib (por ejemplocabal install --extra-lib-dirs=/opt/local/lib --extra-include-dirs=/opt/local/include --extra-lib-dirs=/usr/lib --extra-include-dirs=/usr/include gd), pero ninguno funcionó. La desinstalación de MacPorts libiconv no es realmente una opción, ya que tengo varios puertos instalados que dependen de él, incluidos algunos puertos a los que quiero que se conecte Haskell, como gd2.

Por lo que he visto en línea, el resultado realmente parece ser "Estás desanimado": no se puede vincular con ninguna biblioteca MacPorts mientras se compila con GHC, y no parece haber una solución. Sin embargo, ese hilo era de finales de 2009, así que creo que hay una posibilidad de que alguien tenga una solución, una solución alternativa, un hack ridículo ... cualquier cosa, de verdad. Entonces: ¿Alguien sabe cómo hacer que GHC 6.12 se vincule con el sistema libiconv al mismo tiempo que se vincula a bibliotecas desde MacPorts? O, en su defecto, una forma de hacer que el enlace no rompa de alguna otra forma inteligente?

+0

¿Ha instalado la Plataforma Haskell binario, o los DarwinPorts construir? O la construcción de la fuente? –

+0

Instaladores binarios para GHC y la plataforma Haskell. Editaré la pregunta para reflejar eso. –

+0

Obtengo exactamente este problema con un GHC 6.12.3 que he creado desde la fuente. –

Respuesta

9

Recibí el mismo error en MacOSX 10.5.8 cuando instalé haskell-platform-2010.1.0.1-i386 e intenté compilar un programa haskell. La solución para mí fue agregar la opción "-L/usr/lib" a ghc al compilar el programa. Creo que esto logró que el enlazador busque primero/usr/lib para la biblioteca iconv, que resolvió el problema por mí.

+1

Podría haber jurado que probé esto, pero cuando estaba compilando algo usando GTK hoy y obteniendo el mismo error, pensé que lo probaría. He aquí que funcionó! ¡Gracias! –

+1

¿Cómo se logra esto al instalar cosas con cabal? –

+5

Un simple "extra-lib-dirs:/usr/lib" en ~/.cabal/config se encargó de eso por mí. –

0

Esto es raro: afaik Platform 2010.1.0.1 does not work on OS X 10.5.8, esto ha sido reportado y verificado por varias personas, entre las que me incluyo, y lo que es más interesante - by you!

+2

Ese error indica que * cabal * no funciona --- para mí, al menos, GHC y GHCi funcionó bien. Tuve que instalar 'cabal',' alex' y 'happy' de la fuente; una vez que lo hice, todo funcionó (a excepción de este error libiconv). Buena captura, sin embargo. –

1

Hice desaparecer mis problemas desinstalando MacPorts. Probablemente pueda salirse con la suya simplemente desinstalando la versión MacPorts de libiconv y cualquier biblioteca que dependa de ella.

+1

Esto funcionó para mí también. HomeBrew parece ser una buena alternativa a MacPorts. –

1

estoy un poco vergüenza admitirlo, pero he tenido cierto éxito con conjuros como la siguiente:

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

Tal vez esto puede ser mejor cabal configure --extra-lib-dir=/usr/lib No resuelve el problema en OSX Mountain Lion

0

me fijo por:

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