2010-04-01 11 views
8

Ich habe versucht, Haskell Platform und cabal-install installiert auf Linux in User-Space auf einem System, das nicht das GNU Multi-Precision-Paket (GMP) installiert installiert.Verwenden von GHC, cabal mit GMP im User-Space installiert

Ich habe GHC-6.12.1 installiert und GHCi funktioniert, indem ich LB_LIBRARY_PATH auf das Verzeichnis lib, in dem ich GMP installiert habe, zeigen, aber dann lief im nächsten Schritt Probleme, cabal-install zu arbeiten. Es versuchte weiterhin (statisch) mit GMP zu verlinken.

Dies schlägt fehl, weil der GMP nicht im System installiert ist und ld keine Ahnung hat, wo die Bibliotheken zu finden sind, und es gibt keine Umgebungsvariable (die ich kenne), die ld sagen kann, wo der Benutzer zu finden ist -installed GMP, und (scheinbar) keine Möglichkeit zu sagen, Cabal zu konfigurieren, um die relevante -L Flagge zu liefern.

Nach vielen fruchtlosen Such-und Hacking-Versuche traf ich auf die absurd einfache Idee der Installation meiner eigenen ld Shell-Skript, das das System ld mit der entsprechenden -L-Flag aufruft.

Dies ist ein Shell-Scripting-101, natürlich:

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

Mit diesem Skript in einem Verzeichnis auf meinem PATH vor /usr/bin alle Probleme weg gegangen installiert sein scheinen.

Antwort

10

Grundsätzlich funktioniert Ihr Ghc noch nicht. Ja, es kann Dinge kompilieren, aber es kann keine Programme verbinden, weil es sie mit gmp verknüpfen muss.

Was wir tun können, ist ein Kernpaket, z. das rts-Paket, so dass ghc immer den richtigen -L Flag verwenden:

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

Für diejenigen, die GHC in einem Benutzerverzeichnis installiert haben, werden sie in der Lage sein, den letzten Befehl mit sudo auszuführen. Als ich die Datei rts.pkg manuell editierte, wusste ich nicht, welche Art von Feld separater cabal verwendet wurde, also legte ich einfach das zusätzliche Bibliotheksverzeichnis in eine eigene Zeile nach dem Original. – Emanuel

+3

Das Trennzeichen für diese Bibliotheksverzeichnissen ist nur Leerzeichen. –

+0

Kopieren Sie die Datei libgmp.so in eines der 'include-dirs' z. '/ home/dilwar/bin/lib/ghc-7.8.3/rts-1.0'. Es hat für mich funktioniert. – Dilawar