Установка двоичных файлов ghc в Linux (не могу найти libgmp.so) - PullRequest
27 голосов
/ 15 июня 2011

Я пытаюсь установить платформу Haskell на Linux впервые (я также довольно новый пользователь Linux). Система жертвы - это свежая система Red Hat. И все, что здесь задействовано, должно быть 64-битным.

Указания на веб-сайте платформы [1] указывают на то, что мне нужен ghc7.0.3 для ускорения. Для этого они предоставляют ссылку на общий двоичный файл ghc-7.0.3. Я взял это и побежал

$ ./configure ...
$ make install ...

согласно указаниям без инцидентов (это двоичный файл, поэтому компиляция не требуется) Однако, когда я попытался запустить ghci, я получил вывод.

$ ghci
GHCi, version 7.0.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... <command line>: can't load .so/.DLL for: gmp (libgmp.so: cannot open shared object file: No such file or directory)

По какой-то причине ghci не может найти libgmp.so. Запуск ghci в конечном итоге вызывает

  /usr/local/lib/ghc-7.0.3/ghc

с кучей опций. Я проверил зависимости через ldd

$ ldd /usr/local/lib/ghc-7.0.3/ghc
    linux-vdso.so.1 =>  (0x00007fffe5f5c000)
    libncursesw.so.5 => /lib64/libncursesw.so.5 (0x0000003ee7000000)
    librt.so.1 => /lib64/librt.so.1 (0x0000003ee5800000)
    libutil.so.1 => /lib64/libutil.so.1 (0x0000003ef3000000)
    libdl.so.2 => /lib64/libdl.so.2 (0x0000003ee5000000)
    libgmp.so.3 => /usr/lib64/libgmp.so.3 (0x0000003ee4400000)
    libm.so.6 => /lib64/libm.so.6 (0x0000003ee4c00000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003ee5400000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003ee4800000)
    libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003ef3400000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003ee4000000)

и это показывает, что это foud libgmp. libgmp находится в / usr / local / lib и / usr / local / lib64. Я не уверен, как продвинуться с этим. Есть предложения?

[1] http://hackage.haskell.org/platform/linux.html

Ответы [ 3 ]

36 голосов
/ 15 июня 2011

Вы либо добавляете /usr/local/lib и / или /usr/local/lib64 к $LD_LIBRARY_PATH, либо добавляете их к /etc/ld.so.conf, либо (поскольку у вас уже есть /usr/lib64/libgmp.so.3) добавляете недостающую символическую ссылку:

cd /usr/lib64
sudo ln -s libgmp.so.3 libgmp.so

(и, возможно, то же самое для /usr/lib).

Обратите внимание, что /usr/lib64/libgmp.so.3 может отличаться от /usr/local/lib64/libgmp.so,убедитесь, что GHC действительно может использоваться с первым.

10 голосов
/ 02 апреля 2016

В моем случае помогла установка пакета gmp-devel (opensuse)

3 голосов
/ 09 сентября 2015

Я не уверен, что установка символической ссылки из libgmp.so в libgmp.so.3 - правильный путь.Что происходит, когда вы получаете обновление версии и поэтому libgmp.so.3 исчезает.Настройка LD_LIBRARY_PATH кажется лучшим решением.

Есть и другое решение для RedHat / CentOS и, возможно, расширение Fedora: установите пакет gmp-devel.Это устанавливает символическую ссылку выше, но делает это в дистрибутиве (поэтому обновления должны также обновлять символическую ссылку).

...