我怎样才能知道哪个 libstdc++双转换想要什么?
这是我在尝试将 .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
我怎样才能确切地知道它想要什么?
Here's the error I see when trying to load a .hs file into 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)
Further investigation reveals I have multiple stdc++ libraries installed
>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
I thought maybe I could make a symlink to what it wants, but I have no idea which one. I'm using this OS
2.6.35-22-server #33-Ubuntu SMP Sun Sep 19 20:48:58 UTC 2010 x86_64 GNU/Linux
How can I tell exactly what it wants?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
/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 有所不同。
/usr/lib/libstdc++.so.6
should be a symlink to/usr/lib/libstdc++.so.6.0.14
. This is probably the version you need./usr/lib32/libstdc++.so.6
should be a symlink to/usr/lib32/libstdc++.so.6.0.14
, they are for 32-bit programs, you don't normally need them./usr/lib/gcc/x86_64-linux-gnu/4.4/libstdc++.so
is the problem.double-conversion-0.2.0.1
probably has got linked against it, andghci
cannot find it. Normally everything should be linked againstlibstdc++.so.6
, notlibstdc++.so
without a version suffix.I think one should not have a version-less
libstdc++.so
at all anywhere in the system. (There's none on my gentoo box for example.) It is dangerous, as different major versions oflibstdc++
are usually binary incompatible. Try removing the library you have under/usr/lib/gcc/
, then reinstallgcc
and see if it gets installed again.If it does get installed, then a symlink named
/usr/lib/libstdc++.so
pointing to/usr/lib/libstdc++.so.6
should solve this problem. I'm not sure this would be the right way to solve it in the long run though.These are things I have found through experiments with my own Linux box. I am not an expert in Ubuntu, it may do things differently from other Linuxes.
要在 64 位 Fedora 16 上解决该问题:
To work around the issue on 64-bit Fedora 16:
/usr/lib
中的符号链接到一个文件:只需运行:
它应该可以工作。
The ones in
/usr/lib
symlink to one file:Just run:
and it should work.