22

に関して問題がありlibstdc++.soます。

新しいバージョンの gcc をインストールし、C++ コードをコンパイルしようとしました。コンパイルは機能しましたが、バイナリ (m5.optはその名前) を実行しようとすると、次のエラーが発生しました。

build/ALPHA_SE/m5.opt: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by build/ALPHA_SE/m5.opt).

交換する必要がありlibstdc++.soますか? その場合、必要なバージョンをどこでダウンロードできますか? GCC Web サイトでは、libstdc++ は現在 gcc の一部であると書かれています。

詳細

GCC: 以前は gcc 4.1.2 を使用していましたが、gcc 4.2.4 をダウンロードしました。私が実行した展開されていないgccディレクトリから./configure; 作る; sudo make install`. gcc または g++ を使用してコンパイルしようとしたとき、デフォルトのバージョンはまだ 4.1.2 でした。これを克服するために、いくつかのリンクを置き換えました。

mv /usr/bin/gcc /usr/bin/gcc_bak
ln -s /usr/local/bin/gcc gcc
mv /usr/bin/g++ /usr/bin/g++_bak
ln -s /usr/local/bin/g++ g++

GLIBC(++) -- libstdc++:

/usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.8
/usr/local/lib/libstdc++.so -> libstdc++.so.6.0.9
/lib/libc.so.6 -> libc-2.5.so -> libc-2.5.so

Linux バージョン: 以下 を提供しuname -aます:

Linux madmax 2.6.18-128.4.1.el5 #1 SMP Tue Aug 4 12:51:10 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

4

3 に答える 3

27

問題は、新しいものをGCC間違ってビルドしたことです: Linux では、使用する必要があります

./configure --prefix=/usr

デフォルトのインストール接頭辞は です。これが、バイナリをなどに入れる/usr/local理由です。make installgccg++/usr/local/bin

今起こっていることは、 new (symlinked) を使用してコンパイルおよびリンクすることですGCC 4.2.4が、実行時にプログラムは古いもの/usr/lib64/libstdc++.so.6(必須の 6.0.9 ではなくバージョン 6.0.8) にバインドします。を実行することで確認できますldd build/ALPHA_SE/m5.opt: を使用していることがわかります/usr/lib64/libstdc++.so.6

あなたができるいくつかの修正があります。

env LD_LIBRARY_PATH=/usr/local/lib64 ldd build/ALPHA_SE/m5.opt

LD_LIBRARY_PATHバイナリを正しいライブラリにリダイレクトするのに十分な設定であることを示す必要があります。

LD_LIBRARY_PATH=/usr/local/lib64 build/ALPHA_SE/m5.opt

実行するだけです。で再リンクすることにより、このパスを m5.opt バイナリに「焼き付ける」ことができます-Wl,-rpath=/usr/local/lib64

より永続的な解決策は、バイナリを修正したのと同じ方法でライブラリを修正することです。

cd /usr/lib64 && mv libstdc++.so.6 libstdc++.so.6_bak &&
ln -s /usr/local/lib64/libstdc++.so.6 .

さらに良い解決策は、新しいGCC--prefix=/usr、次にで再構成することmake all installです。

于 2009-12-26T21:18:15.090 に答える
8

これは非常に古い質問ですが...

通常、システム コンパイラ (つまり のコンパイラ) を置き換えるのは良い考えではありません。システム/usr全体がそのコンパイラで構築され、それに依存するからです。

通常は、新しいコンパイラを別の場所にインストールしてから、libstdc++ FAQ を参照してください。動的にリンクされたライブラリが確実に見つかるようにするにはどうすればよいですか? 実行時に正しい libstdc++.so が確実に見つかるようにする方法については、マニュアルの動的ライブラリまたは共有ライブラリの検索を参照してください。

于 2012-06-22T21:39:42.277 に答える