c++ - 更新 - linux 共有ライブラリ 確認
どのようなバージョンのlibstdc++ライブラリがあなたのLinuxマシンにインストールされているかはどうしたらわかりますか? (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同等のものです。