我怎样才能知道哪个 libstdc++双转换想要什么?

发布于 2024-12-09 21:32:25 字数 718 浏览 0 评论 0原文

这是我在尝试将 .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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

三人与歌 2024-12-16 21:32:25

/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, and ghci cannot find it. Normally everything should be linked against libstdc++.so.6, not libstdc++.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 of libstdc++ are usually binary incompatible. Try removing the library you have under /usr/lib/gcc/, then reinstall gcc 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.

何止钟意 2024-12-16 21:32:25

要在 64 位 Fedora 16 上解决该问题:

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

To work around the issue on 64-bit Fedora 16:

sudo ln -si /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so
黄昏下泛黄的笔记 2024-12-16 21:32:25

/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

它应该可以工作。

The ones in /usr/lib symlink to one file:

$ 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

Just run:

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

and it should work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文