not - どのようなバージョンのlibstdc++ライブラリがあなたのLinuxマシンにインストールされているかはどうしたらわかりますか?



libstdc++ 更新 (3)

私は次のコマンドを見つけました: strings /usr/lib/libstdc++.so.6 | grep GLIBC hereからstrings /usr/lib/libstdc++.so.6 | grep GLIBC 。 これはうまくいくようですが、これはアドホック/ヒューリスティックな方法です。

C ++のライブラリバージョンを照会するために使用できる特定のコマンドがありますか? または、私が受け入れた方法を見つけた方法ですか?


g++ --version ABIドキュメントと組み合わせてg++ --versionを調べることができます。


あなたは正確に何を知りたいですか?

共有ライブラリsoname? これはファイル名の一部であり、 libstdc++.so.6 、またはreadelf -d /usr/lib64/libstdc++.so.6 | grep soname表示されlibstdc++.so.6 readelf -d /usr/lib64/libstdc++.so.6 | grep soname

マイナーリビジョン番号? シンボリックリンクが何を指しているかを確認するだけで、それを得ることができるはずです:

$ ls -l  /usr/lib/libstdc++.so.6
lrwxrwxrwx. 1 root root 19 Mar 23 09:43 /usr/lib/libstdc++.so.6 -> libstdc++.so.6.0.16

これは6.0.16で、 libstdc++.so.6バージョンの第16改訂版で、 GLIBCXX_3.4.16シンボルバージョンに対応しています。

それともそれは、それが由来するリリースを意味するのですか? それはGCCの一部なので、GCCと同じバージョンなので、 g++libstdc++.so無類のバージョンをインストールすることであなたのシステムを台無しにしない限り、それを得ることができます:

$ g++ -dumpversion
4.6.3

または、ほとんどのディストリビューションでは、パッケージマネージャーに尋ねることができます。 私のFedoraホストでは

$ rpm -q libstdc++
libstdc++-4.6.3-2.fc16.x86_64
libstdc++-4.6.3-2.fc16.i686

他の回答からも分かるように、ABIのドキュメントをチェックすることでリリースをライブラリバージョンにマッピングできます


私が使用する傾向のあるメカニズムは、libstdc ++から.gnu.version情報をダンプするreadelf -Vと、抽出された最大のGLIBCXX_値に一致するルックアップテーブルのGLIBCXX_です。

readelf -sV /usr/lib/libstdc++.so.6 | sed -n 's/.*@@GLIBCXX_//p' | sort -u -V | tail -1

sortバージョンが古すぎて-Vオプション(バージョン番号でソート)を持てない場合は、次のように使用できます:

tr '.' ' ' | sort -nu -t ' ' -k 1 -k 2 -k 3 -k 4 | tr ' ' '.'

sort -u -V代わりに、バージョン番号を4桁までソートすることができます。

一般的に、ABIバージョンとのマッチングは十分なはずです。

あなたがlibstdc++.so.<VERSION>を追跡しようとしているのであれば、ちょっとしたbashを使うことができます:

file=/usr/lib/libstdc++.so.6
while [ -h $file ]; do file=$(ls -l $file | sed -n 's/.*-> //p'); done
echo ${file#*.so.}

私のシステムでは6.0.10得られ6.0.10

しかし、systemYで動作するようにsystemXでコンパイルされたバイナリを取得しようとしている場合、これらの種類のものはこれまでのところしか得られません。 そのような場合には、libstdc ++。のコピーを持ち歩いてアプリケーションで使用した後、次のような実行スクリプトを実行します。

export LD_LIBRARY_PATH=<directory of stashed libstdc++.so>
exec application.bin "[email protected]"

一般にアプリケーションのバージョンと互換性のないボックス上の.soの問題を回避します。 環境の極端な違いについては、アプリケーションが正しく動作するまで、すべての依存ライブラリを追加する傾向があります。 これは、ウィンドウズのために何がdllの地獄と見なされるかを扱うLinux同等のものです。





shared-libraries