2

这是我在尝试将 .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-server #33-Ubuntu SMP Sun Sep 19 20:48:58 UTC 2010 x86_64 GNU/Linux

我怎么能准确地说出它想要什么?

4

3 回答 3

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

它应该可以工作。

于 2011-10-14T02:39:04.873 回答
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 不同。

于 2011-10-14T02:52:53.727 回答
1

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

sudo ln -si /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so
于 2011-10-28T18:17:50.043 回答