Pregunta

Estoy intentando compilar e instalar readline en una MacBook i386 con Snow Leopard.

He realizado los siguientes pasos:

download and extract readline-6.0.tar.gz
./configure
make everything
sudo make install

Revisé los ejemplos y parecen funcionar (por ejemplo, rltest admite el historial).Esta es la salida del archivo Libreadline.6.0.dylib:

libreadline.6.0.dylib: Mach-O 64-bit dynamically linked shared library x86_64

Esperaba que fuera i386, pero si los ejemplos funcionan...

luego instalé el paquete readline de cabal con lo siguiente:

cabal install readline --reinstall --configure-option=--with-readline-includes="/usr/local/include" --configure-option=--with-readline-libraries="/usr/local/lib"

Parece funcionar:tenga en cuenta que sin las opciones de configuración la instalación falla.He utilizado el indicador --reinstall para forzar la reinstalación ya que ya hice muchas pruebas.

Este es el resultado de la información cabal:

$ cabal info readline
* readline         (library)
    Synopsis:      An interface to the GNU readline library
    Latest version available: 1.0.1.0
    Latest version installed: 1.0.1.0
    Homepage:      [ Not specified ]
    Bug reports:   [ Not specified ]
    Description:   More information on readline can be found at
                   http:\/\/www.gnu.org\/directory\/readline.html.
    License:       GPL
    Maintainer:    libraries@haskell.org
    Source repo:   [ Not specified ]
    Flags:         split-base
    Dependencies:  base >=3, process -any, base <3
    Documentation: [ Not installed ]
    Cached:        Yes
    Modules:
        System.Console.Readline
        System.Console.SimpleLineEditor

Ok, parece que ya terminé.No, no lo soy:

GHCi, version 6.10.4: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
Prelude> import System.Console.Readline
Prelude System.Console.Readline> do { readline "Prompt" }
Loading package syb ... linking ... done.
Loading package base-3.0.3.1 ... linking ... done.
Loading package filepath-1.1.0.2 ... linking ... done.
Loading package old-locale-1.0.0.1 ... linking ... done.
Loading package old-time-1.0.0.2 ... linking ... done.
Loading package unix-2.3.2.0 ... linking ... done.
Loading package directory-1.0.0.3 ... linking ... done.
Loading package process-1.0.1.1 ... linking ... done.
Loading package readline-1.0.1.0 ... linking ... <interactive>: 
/Users/macbook/.cabal/lib/readline-1.0.1.0/ghc-6.10.4/HSreadline-1.0.1.0.o: unknown symbol `_rl_basic_quote_characters'
ghc: unable to load package `readline-1.0.1.0'

Como era de esperar, tampoco puedo crear paquetes que dependan de readline (por ejemplo, JHC).

¿Me puede apuntar en la dirección correcta?Dime si necesitas otra información.

Gracias de antemano.

¿Fue útil?

Solución

He encontrado el siguiente procedimiento que ha funcionado muy bien para mí. Espero que pueda servir para futuras referencias.

Como sospechaba, no estaba compilando correctamente readline. El obsequio de esto era

1. file explicity told me that the library was 64 bit
2. as per rtperson advice, compiling a test example was illuminating: linking was failing for that.

Mire la salida:

ghc --make test_readline.hs 
Linking test_readline ...
ld: warning: in /usr/local/lib/libreadline.dylib, file is not of required architecture

Así que me puse hasta readline de compilación con la arquitectura correcta, no estaba adivinando correctamente. Simplemente limpiaba los directorios compilación (make distclean), y luego pasan configurada la bandera -m32 a gcc:

./configure CC="gcc -m32"

y todo luego reconstruida (marca todo) y lo instalamos (sudo make install). Ahora el tipo de archivo es alentador:

~ 628 $ file /usr/local/lib/libreadline.dylib 
/usr/local/lib/libreadline.dylib: Mach-O dynamically linked shared library i386

y readline está trabajando, por fin.

PS:. También se puede construir el paquete readline-1.0.1.0 a mano, como se detalla en el apartado "Configuración de Cabal instalar readline en Snow Leopard con MacPorts" hilo en la lista de correo Haskell-cafetería el 29 dic 2009

Otros consejos

Yo también me encontré con esta dificultad.Resulta que puedes compilar binarios "gordos", que contengan versiones de 32 y 64 bits, lo que evita este problema muy bien.Así es como Apple distribuye sus propias bibliotecas, y te cuentan cómo hacerlo en esta nota técnica:

Creación de binarios universales a partir de proyectos de código abierto basados ​​en "configuración"http://developer.apple.com/library/mac/#technotes/tn2005/tn2137.html

La nota es un poco antigua (se refiere a la creación de archivos binarios ppc/i386), pero el procedimiento funcionó bien cuando sustituí "-arch i386 -arch x86_64".Ahora tengo, por ejemplo,

$ Archivo Libreadline.A Libreadline.A:Mach-O Universal Binary con 2 arquitecturas Libreadline.a (para la arquitectura i386):AR Archive AR actual Library Libreadline.a (para la arquitectura x86_64):biblioteca aleatoria del archivo ar actual

tratando de trabajar con bibliotecas externas es uno de los mayores puntos de dolor en Haskell en este momento. La comunidad está trabajando en ello, pero la realidad es que la mayoría de los programadores de Haskell son los estudiantes y profesores, y el mantenimiento de los procedimientos de instalación sólidas entre los diversos sistemas Unix, cajas de ordenadores Mac y Windows es el tipo de trabajo pesado donde realmente se necesita una corporación con el dinero en la línea con el fin de obtener resultados. (Piense Sun con Java ...)

Una vez sintió las suficientes veces para el dolor con GTK y OpenGL, estoy llegando rápidamente a la conclusión de que la manera más agradable de trabajo con Haskell es pegarse a Linux. Puedo evitar el noventa por ciento del dolor si simplemente arrancar en Ubuntu.

Dicho esto, se puede obtener un error más informativo si se intenta la follwing:

ghc --make TestReadline.hs

Cuando TestReadline.hs simplemente pone a prueba la presencia de la biblioteca, al igual que está haciendo ahora con GHCi:

main = do { readline "Prompt" }

También hay un par de banderas es posible que desee agregar al expediente de readline .cabal que pueden ayudarle: bibliotecas extra, extra-ghci-bibliotecas, y LD-options. Aquí es parte de la documentación bastante escueta. Usted puede encontrar mejor a través de Google.

Si todo lo demás falla, el canal de IRC de Haskell es muy útil.

Pero en realidad, ¿hay alguna razón por la IO estándar de Haskell no funciona para usted? Ya sabes, algo como esto (biselado de la página 186 de Real World Haskell )?

main = do 
   putStrLn "What's your name?"
   inpStr <- getLine
   putStrLn $ "Welcome, " ++ inpStr ++ "!"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top