2012-02-29 31 views
2

Linuxでは、同じマシンに2つのバイナリAとBを構築しました。私は若干古いlibstdC++をインストールした別のマシンに持っていきます。私はlddは実行すると、私はこれを取得バイナリAに-v:libstdC++の依存関係はどのように決定されますか?

libstdc++.so.6 (CXXABI_1.3) => /usr/lib64/libstdc++.so.6 
libstdc++.so.6 (GLIBCXX_3.4) => /usr/lib64/libstdc++.so.6 

を私はバイナリBに-v lddの実行すると、私はこの取得:

libstdc++.so.6 (CXXABI_1.3) => /usr/lib64/libstdc++.so.6 
libstdc++.so.6 (GLIBCXX_3.4.15) => not found 
libstdc++.so.6 (GLIBCXX_3.4) => /usr/lib64/libstdc++.so.6 

注意をGLIBCXX_3.4.15の依存関係が見つかりません。これはインストールされたlibstdC++がGLIBCXX_3.4.10までしかサポートしていないので意味があります。

問題は:lddはバイナリBがGLIBCXX_3.4.15に依存していると判断しますか?さらに重要なことは、この依存関係の原因となっているコードを特定するにはどうすればよいですか?

答えて

2

あなたが実行可能にnmを実行する場合は、あなたが定義されていないそのうちのいくつかは多数のシンボルを、表示されます(あなたは彼らが最初の列に空白になっているように、これらを伝えるとnmの2番目の列にUを持つことができます

これらの記号の中には、末尾に@@whateverというサフィックスが付きます。これらのサフィックスは、これらのシンボルのバージョン依存性です。バイナリBで@@GLIBCXX_3.4.15を検索すると、特定のシンボルがそのバージョンの依存関係を引き起こしていることがわかります。

+0

非常に涼しい!ありがとう – Skrymsli

関連する問題