我第一次尝试在Linux上安装Haskell平台(我也是一个相当新的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)
这表明它违反了libgmp。libgmp位于/usr/local/lib和/usr/local/lib64中。我不知道该怎么做。有什么建议吗?
[1]http://hackage.haskell.org/platform/linux.html
您可以将/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不同的版本。因此,请确保ghc实际上可以与前者一起使用。
安装gmp-devel包对我的情况(opensuse)有帮助
我不确定设置从libgmp.so到libgmp.so.3的符号链接是否正确。当你得到一个版本更新,那么libgmp.so.3就会消失。设置LD_LIBRARY_PATH似乎是一个更好的解决方案。
还有另一个适用于RedHat/CentOS以及Fedora的解决方案:安装gmp-devel包。这设置了上面的符号链接,但在分发中这样做(因此更新也应该更新符号链接)。