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

必要なものへのシンボリックリンクを作成できるのではないかと思いましたが、どのシンボリックリンクかわかりません。このOSを使用しています 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/lib1 つのファイルへのシンボリック リンク内のもの:

$ 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 に答える