2010-04-01 5 views
8

J'ai essayé d'installer Haskell Platform et cabal-install installé sous Linux dans l'espace utilisateur sur un système sur lequel le progiciel GNU Multi-Precision (GMP) n'est pas installé.Utilisation de GHC, cabal avec GMP installé dans l'espace utilisateur

J'ai réussi à faire fonctionner GHC-6.12.1 et GHCi en configurant LB_LIBRARY_PATH pour pointer vers le répertoire lib où j'ai installé GMP, mais j'ai ensuite rencontré des problèmes à l'étape suivante, pour que cabal-install fonctionne. Il a continué à essayer de (statiquement) lier à GMP.

Cela échoue parce que le GMP n'est pas installé dans le système et ld n'a aucune idée où trouver les bibliothèques, et il n'y a aucune variable d'environnement (que je sache) qui peut dire à ld où trouver l'utilisateur -installé GMP, et (apparemment) aucun moyen de dire à Cabal de fournir le drapeau -L correspondant.

Après beaucoup de recherches infructueuses et les tentatives de piratage j'ai frappé sur l'idée absurdement simple d'installation mon propre script shell ld qui invoque le système ld avec le drapeau -L approprié.

C'est les scripts shell 101, bien sûr:

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

Avec ce script installé dans un répertoire sur mon PATH devant /usr/bin tous les problèmes semblent avoir disparu.

Répondre

10

Fondamentalement, votre ghc ne fonctionne pas encore. Oui, il peut compiler des choses, mais il ne peut pas lier les programmes car il doit les lier à gmp.

Ce que nous pouvons faire est d'éditer un paquet de base, par ex. le paquet rts, de sorte que GHC utilisera toujours le droit -L drapeau:

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

Pour ceux qui ont installé GHC dans un répertoire utilisateur, ils seront en mesure d'exécuter la dernière commande avec sudo. Quand j'ai édité manuellement le fichier rts.pkg, je ne savais pas quel type de champ cabaliseur de champ utilisé, donc j'ai juste mis le répertoire de la bibliothèque supplémentaire sur sa propre ligne après l'original. – Emanuel

+3

Le séparateur pour ces répertoires de bibliothèque est juste espace. –

+0

Copiez le fichier libgmp.so dans l'un des répertoires "include-dirs", par ex. '/ home/dilawar/bin/lib/ghc-7.8.3/rts-1.0'. Cela a fonctionné pour moi. – Dilawar

Questions connexes