類似/usr/lib 64/libstdc++を解決する.so.6: version `GLIBCXX_3.4.21'not foundの問題
3290 ワード
ソースコードのコンパイルアップグレードに
1.問題原因分析
最新バージョンの
次のコマンドを実行して、ダイナミックライブラリを確認します.
出力結果は次のとおりです.
以上の出力から、
2.問題処理
次のコマンドを実行して、
出力は次のとおりです.
上記の最新のダイナミックライブラリ
レプリケーション後、システムのデフォルト動的ライブラリの指向を変更します.すなわち、デフォルトライブラリのソフト接続を再構築します.
作業ディレクトリを
元のソフト接続を削除:
デフォルトライブラリのソフト接続を最新のダイナミックライブラリに移動します.
デフォルトのダイナミックライブラリのアップグレードが完了しました.次のコマンドを再実行して、ダイナミックライブラリを確認します.
次のように出力されます.
原文住所:http://itbilu.com/linux/management/NymXRUieg.html
gcc
がインストールされた後、プログラムをコンパイルしたり、他のプログラムを実行したりすると、/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
のような問題が発生することがあります.これは、gcc
をアップグレードすると、生成されたダイナミックライブラリが古いバージョンgcc
のダイナミックライブラリを置き換えていないため、gcc
の最新バージョンのダイナミックライブラリをシステムの古いバージョンのダイナミックライブラリに置き換えることで解決できるからです.1.問題原因分析
最新バージョンの
Node.js
(最新バージョンのNode.js
ではC++ 11
が使用されているが、C++ 11
ではcode>gcc 4.8+がサポートされる必要がある)をインストールするために、gcc
を現在の最新バージョンのv 5.2.0
にアップグレードした.アップグレード後、新しいバージョンのNode.js
(v 4.2.1
)のコンパイルに成功してインストールされたが、ランタイムプログラムでは以下のエラーが発生した.node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)
node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by node)
node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
次のコマンドを実行して、ダイナミックライブラリを確認します.
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
出力結果は次のとおりです.
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
以上の出力から、
gcc
のダイナミックライブラリは古いバージョンであることがわかります.これらの問題は、gcc
をアップグレードすると、生成されたダイナミックライブラリが古いバージョンgcc
のダイナミックライブラリに置き換えられないためです.2.問題処理
次のコマンドを実行して、
gcc
をコンパイルしたときに生成された最新のダイナミックライブラリを検索します.find / -name "libstdc++.so*"
出力は次のとおりです.
/home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 //
……
/home/gcc-5.2.0/gcc-temp
はgccアップグレード時の出力ディレクトリである.上記の最新のダイナミックライブラリ
libstdc++.so.6.0.21
を/usr/lib64
ディレクトリにコピーします.cp /home/gcc-5.2.0/gcc-temp/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 /usr/lib64
レプリケーション後、システムのデフォルト動的ライブラリの指向を変更します.すなわち、デフォルトライブラリのソフト接続を再構築します.
作業ディレクトリを
/usr/lib64
に切り替えます.cd /usr/lib64
元のソフト接続を削除:
rm -rf libstdc++.so.6
デフォルトライブラリのソフト接続を最新のダイナミックライブラリに移動します.
ln -s libstdc++.so.6.0.21 libstdc++.so.6
デフォルトのダイナミックライブラリのアップグレードが完了しました.次のコマンドを再実行して、ダイナミックライブラリを確認します.
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
次のように出力されます.
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
原文住所:http://itbilu.com/linux/management/NymXRUieg.html