Установка ghc-двоичных файлов в Linux (невозможно найти libgmp.so)
Я пытаюсь установить платформу 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
Ответы
Ответ 1
Вы либо добавляете /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/lib 64/libgmp.so.3 может быть другой версией из /usr/local/lib 64/libgmp.so, убедитесь, что ghc можно использовать с предыдущим.
Ответ 2
Установка пакета gmp-devel помогла мне в моем случае (opensuse)
Ответ 3
Я не уверен, что установка символической ссылки из libgmp.so в libgmp.so.3 - это правильный путь. Что происходит, когда вы получаете обновление версии, и поэтому libgmp.so.3 исчезает. Настройка LD_LIBRARY_PATH кажется лучшим решением.
Также есть другое решение для RedHat/CentOS и, возможно, расширение Fedora: установите пакет gmp-devel. Это устанавливает символическую ссылку выше, но делает это в дистрибутиве (поэтому обновления также должны обновлять символическую ссылку).