如何判断哪个libstdc ++双转换需要?

时间:2011-10-14 00:18:10

标签: haskell ubuntu ghci

这是我在尝试将.hs文件加载到ghci时看到的错误。

>Loading package http-enumerator-0.7.1.1 ... linking ... done.
>Loading package double-conversion-0.2.0.1 ... can't load .so/.DLL for: stdc++ ?>>>     (libstdc++.so: cannot open shared object file: No such file or directory)

进一步调查显示我安装了多个stdc ++库

>locate libstdc++.so
>/usr/lib/libstdc++.so.6
>/usr/lib/libstdc++.so.6.0.14
>/usr/lib/gcc/x86_64-linux-gnu/4.4/libstdc++.so
>/usr/lib32/libstdc++.so.6
>/usr/lib32/libstdc++.so.6.0.14

我想也许我可以制作符号链接到它想要的东西,但我不知道哪一个。我正在使用这个操作系统 2.6.35-22-服务器#33-Ubuntu SMP Sun Sep 19 20:48:58 UTC 2010 x86_64 GNU / Linux

我怎样才能确切地说出它想要什么?

3 个答案:

答案 0 :(得分:1)

/usr/lib符号链接到一个文件:

$ ls -l libstdc++*
lrwxrwxrwx 1 root root      19 2011-09-24 22:14 libstdc++.so.6 -> libstdc++.so.6.0.13
-rw-r--r-- 1 root root 1044112 2010-03-26 20:16 libstdc++.so.6.0.13

跑步:

sudo ln -si /usr/lib/libstdc++.so.6 /usr/lib/libstdc++.so

它应该有用。

答案 1 :(得分:1)

/usr/lib/libstdc++.so.6应该是/usr/lib/libstdc++.so.6.0.14的符号链接。这可能是您需要的版本。

/usr/lib32/libstdc++.so.6应该是/usr/lib32/libstdc++.so.6.0.14的符号链接,它们适用于32位程序,通常不需要它们。

/usr/lib/gcc/x86_64-linux-gnu/4.4/libstdc++.so就是问题所在。

double-conversion-0.2.0.1可能与之相关联,ghci无法找到它。通常情况下,所有内容都应该与libstdc++.so.6相关联,而不是libstdc++.so而没有版本后缀。

认为在系统中的任何地方都不应该有一个版本低libstdc++.so。 (例如,在我的gentoo框中没有。)这很危险,因为libstdc++的不同主要版本通常是二进制不兼容的。尝试删除/usr/lib/gcc/下的库,然后重新安装gcc,看看它是否再次安装。

如果确实安装了,那么指向/usr/lib/libstdc++.so 的名为/usr/lib/libstdc++.so.6的符号链接应解决此问题。我不确定从长远来看这是解决问题的正确方法。

这些是我通过自己的Linux盒子实验找到的东西。我不是Ubuntu的专家,它可能与其他Linux不同。

答案 2 :(得分:1)

要解决64位Fedora 16上的问题:

sudo ln -si /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so