在Linux上安装ghc二进制文件(找不到libgmp.so)

Tim*_*Tim 27 linux installation haskell ghc

我想第一次在Linux上安装Haskell平台(我也是一个相当新的Linux用户).受害者系统是一个全新的Red Hat系统.这里涉及的一切都应该是64位.

平台网站上的指示[1]表明我需要一个ghc7.0.3来提升物品.它们提供了指向ghc-7.0.3的通用二进制文件的链接.我抓住了这个然后跑了

$ ./configure ...
$ make install ...
Run Code Online (Sandbox Code Playgroud)

按照方向没有事件(它是一个二进制文件,所以不需要编译)但是,当我试图运行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)
Run Code Online (Sandbox Code Playgroud)

由于某种原因,ghci找不到libgmp.so.运行ghci最终会调用

  /usr/local/lib/ghc-7.0.3/ghc
Run Code Online (Sandbox Code Playgroud)

一堆乱七八糟的选择.我通过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)
Run Code Online (Sandbox Code Playgroud)

它表明它是libgmp.libgmp位于/ usr/local/lib和/ usr/local/lib64中.我不知道如何进一步解决这个问题.有什么建议?

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

n. *_* m. 35

你要么添加/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
Run Code Online (Sandbox Code Playgroud)

(对于/ usr/lib可能也是一样的).

请注意/usr/lib64/libgmp.so.3可能与/usr/local/lib64/libgmp.so的版本不同,请确保ghc实际上可以与前者一起使用.

  • 在ubuntu(也许是debian)上,您可以通过安装`libgmp3c2`包修复库错误.这避免了符号链接黑客攻击. (7认同)
  • @Bakuriu上面的评论是有效的 - 对于ubuntu 14,它对我有用`libgmp3-dev`(我的apt不知道`libgmp3c2`) (7认同)
  • 我不知道我是否对此感到满意,但我只是在某处读到了符号链接二进制文件或库是一个非常糟糕的主意.有人说,我引用:"除非你用枪指着你,否则永远不要用符号链接二进制文件".无论如何,我只是按照你的回答,它工作.我只是不确定这是不是最好的方法. (4认同)
  • GHC现在有基于CentOS和Debian的独立构建.您的问题可能是您下载了错误的问题.(不过,上述建议仍然适用于您.) (2认同)

And*_* F. 10

在我的情况下安装gmp-devel包有帮助(opensuse)

  • “ sudo apt install libgmp-dev”在这里提供了帮助。Ubuntu 16.04 LTS。 (2认同)

dav*_*ave 5

我不确定设置从 libgmp.so 到 libgmp.so.3 的符号链接是否是正确的方法。当您获得版本更新并且 libgmp.so.3 消失时会发生什么。设置 LD_LIBRARY_PATH 似乎是一个更好的解决方案。

对于 RedHat/CentOS 以及扩展的 Fedora 来说还有另一种解决方案:安装 gmp-devel 软件包。这会设置上面的符号链接,但在发行版中这样做(因此更新也应该更新符号链接)。