2010-04-01 10 views
8

He intentado instalar Haskell Platform y cabal-install instalados en Linux en el espacio de usuario de un sistema que no tiene instalado el paquete GNU Multi-Precision (GMP).Uso de GHC, cabal con GMP instalado en el espacio de usuario

Logré instalar GHC-6.12.1 y GHCi trabajando configurando LB_LIBRARY_PATH para apuntar al directorio lib donde instalé GMP, pero luego me encontré con problemas en el siguiente paso, obteniendo cabal-install para que funcione. Siguió intentando vincular (estáticamente) con GMP.

Esto falla porque el GMP no está instalado en el sistema y ld no tiene ni idea de dónde encontrar las bibliotecas, y no hay una variable de entorno (que yo sepa) que pueda indicarle dónde encontrar al usuario -instalado GMP, y (aparentemente) no hay manera de decirle a la configuración de Cabal que suministre la bandera relevante -L.

Después de una búsqueda infructuosa y de intentos de pirateo, llegué a la idea absurdamente simple de instalar mi propio script de shell ld que invoca el sistema ld con el indicador -L correspondiente.

Esta es shell scripting 101, por supuesto:

#!/bin/sh 
/usr/bin/ld -L$HOME/gnu/lib "[email protected]" 

Con este script instalado en un directorio en mi PATH por delante de /usr/bin todos los problemas parecen haber desaparecido.

Respuesta

10

Básicamente, su ghc no está funcionando todavía. Sí, puede compilar cosas, pero no puede vincular programas porque necesita vincularlos a gmp.

Lo que podemos hacer es editar algunos paquetes principales, p. el paquete RTS, de manera que GHC siempre utilizará la derecha -L bandera:

ghc-pkg describe rts > rts.pkg 
vi rts.pkg      # add the gmp dir to the `library-dirs` field 
sudo ghc-pkg update rts.pkg 
+1

Para aquellas personas que hayan instalado GHC en un directorio de usuario, que va a ser capaz de ejecutar el último comando con sudo. Cuando edité manualmente el rts.pkg, no sabía qué tipo de campo separater cabal utilizaba, así que simplemente puse el directorio de biblioteca adicional en su propia línea después del original. – Emanuel

+3

El separador para estos directorios de biblioteca es solo espacio. –

+0

Copie libgmp.so a uno de los 'include-dirs', p. '/ home/dilawar/bin/lib/ghc-7.8.3/rts-1.0'. Funcionó para mí – Dilawar

Cuestiones relacionadas