2016-12-13 6 views
1

実行ファイルをldにリンクすると、実行可能ファイルが依存するライブラリのリストが表示されます。これはこれらのライブラリの位置情報の唯一のソースですか、またはオブジェクトファイルにメタデータとして保存されている依存ライブラリの優先バージョンに関する情報ですか?ELFオブジェクトファイルは、依存ライブラリのファイルシステムパスを格納しますか?

特定の問題はこれです:私は両方とも第三ライブラリlCに依存2つの依存ライブラリlAlBを、リンク、およびIは、リンク行にこれらのライブラリへの参照を配置する場合。 lAのC++クラスメソッドはlBのクラスメソッドとは異なるバージョンのlCを呼び出しているようです。これはどのように可能ですか?私はgdbのバックトレースを見ることでこれを知っています。

+0

を、あなたが説明した内容*できない*ことがあります。したがって、あなたの説明が間違っているか、または観察結果の解釈が間違っています。残念ながら、実験を再現するのに十分詳細に記述していないため、これ以上のヘルプは提供できません。あなたの質問を編集し、最小限の例を示し、すべてが公開されます。 –

答えて

1

あるかもしれません。 DT_RPATHは、シンボル解決に使用されます。また、完全なオブジェクト名、つまりにバージョン番号が含まれていて、ライブラリがバージョン管理を正しく使用している場合、シンボルは実際には互いに衝突しません。

私はDT_RPATHDT_SONAME洞察のカップルのための私のブログにあなたを送ることができます:静的ライブラリと

+0

私は、静的リンクについて尋ねていることを明確にすべきでした。 – ThomasMcLeod

+0

あなたは静的ライブラリのリンクを意味しますか?それから、もう少し面白く聞こえて、少し違う問題かもしれません。これらのクラスメソッドがインラインである場合、コンパイラは 'libA'オブジェクトと' libB'オブジェクトのそれぞれに異なるシンボルのコピーを発行し、アドレスを変更する可能性があります。それ以外の場合は、可視性のルールの問題かもしれません。 –

関連する問題