这是我在尝试将.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
我怎样才能确切地说出它想要什么?
答案 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