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ウェブサイトでは、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
問題は、新しいGCC
を誤って作成したことです。Linuxでは、
./configure --prefix=/usr
デフォルトのインストールプレフィックスは/usr/local
です。これがmake install
がgcc
およびg++
バイナリを/usr/local/bin
などに入れる理由です。
今起こっていることは、新しい(シンボリック)GCC 4.2.4
を使用してコンパイルおよびリンクすることですが、実行時にプログラムは古い/usr/lib64/libstdc++.so.6
にバインドします(バージョン6.0.8ではなく、必要な6.0.9)。 。 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
実行する必要があります。このパスを-Wl,-rpath=/usr/local/lib64
と再リンクすることで、m5.optバイナリに「焼き付ける」ことができます。
より永続的な解決策は、バイナリを修正したのと同じ方法でライブラリを修正することです。
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
で再構成することです。
これは非常に古い質問であることは知っていますが、...
通常、システムコンパイラ(/usr
に含まれるコンパイラ)を置き換えることはお勧めしません。これは、システム全体がそれで構築され、それに依存しているためです。
通常、新しいコンパイラを別の場所にインストールしてから、libstdc ++を確認することをお勧めしますFAQ 動的にリンクされたライブラリが確実に見つかるようにするにはどうすればよいですか? および 実行時に正しいlibstdc ++。soが確実に見つかるようにする方法については、マニュアルで動的または共有ライブラリ を検索する。
ここでの他の答えは問題ないはずですが、gccを/ usr/local /にインストールした場合の「迅速で簡単な」解決策は、LD_LIBRARY_PATHに新しいライブラリを追加することです。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64
をチェックして、適切なバージョンのGLIBCがインストールされているかどうかを確認することもできます。
strings /usr/lib/libstdc++.so.6 | grep GLIBC
strings /usr/local/lib64/libstdc++.so.18 | grep GLIBC
私はこの最後のヒントを別のフォーラムから受け取ったので、クレジットが必要です。