2010-04-01 4 views
8

Я пытаюсь установить платформу Haskell и cabal-install, установленную на Linux в пространстве пользователя в системе, в которой не установлен пакет GNU Multi-Precision (GMP).Использование GHC, cabal с GMP, установленным в пользовательском пространстве

Мне удалось установить GHC-6.12.1 и GHCi, установив LB_LIBRARY_PATH, чтобы указать на каталог lib, где я установил GMP, но на следующем этапе столкнулся с проблемами, получив cabal-install. Он продолжал пытаться (статически) ссылаться на GMP.

Это не удается, потому что GMP не установлен в системе, а ld не имеет понятия, где найти библиотеки, и нет никакой переменной среды (что я знаю), которая может определить ld, где найти пользователя -установленный GMP и (по-видимому) никоим образом не сообщая о настройке Cabal для подачи соответствующего флага -L.

После долгих бесплодных поисков и попыток взлома я ударил по абсурдно простой идее установки мой собственный ld скрипт, который запускает систему ld с соответствующим -L флагом.

Это оболочка скриптовый 101, конечно:

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

С помощью этого скрипта, установленного в каталоге на моем PATH впереди /usr/bin все проблемы, кажется, ушли.

ответ

10

В принципе, ваш ghc пока не работает. Да, он может компилировать вещи, но он не может связывать программы, потому что ему нужно связать их с gmp.

Что мы можем сделать, это отредактировать некоторые основные пакеты, например. пакет ртс, так что GHC всегда будет использовать правильный -L флаг:

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

Для тех людей, которые уже установлены GHC в директории пользователя, они будут в состоянии выполнить последнюю команду с Судом. Когда я вручную редактировал rts.pkg, я не знал, какой тип разделителя полей используется, поэтому я просто поместил дополнительный каталог библиотеки на свою собственную строку после оригинала. – Emanuel

+3

Разделитель для этих библиотек - просто пространство. –

+0

Скопируйте файл libgmp.so в один из 'include-dirs', например. '/ Дома/Дилавар/бен/Библиотека/GHC-7.8.3/ртс-1.0'. Это сработало для меня. – Dilawar