Используя GHC, клика с GMP установлена ​​в пространстве пользователя - PullRequest
8 голосов
/ 01 апреля 2010

Я пытался установить платформу Haskell и cabal-install, установленную в Linux, в пользовательском пространстве в системе, в которой не установлен пакет GNU Multi-Precision (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 "$@"

С этим сценарием, установленным в каталоге на моем PATH впереди /usr/bin, все проблемы, похоже, исчезли.

1 Ответ

10 голосов
/ 14 октября 2010

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

Что мы можем сделать, это отредактировать некоторый основной пакет, например, пакет rts, так что 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
...