2017-03-15 15 views
0

私はUnixマシン上でOpenSSLをコンパイルしています。デフォルトのコンパイラはGCC-4.4.7です。私は別のコンパイラGCC-5.2.0を別のフォルダに入れます。私は通常、代わりのコンパイラのパスを$PATHに先行させるので、gccは常に代替パスの1つを使用します。ライブラリが特定のGCCバージョンでコンパイルされているかどうかを確認する方法

しかし、今私はコンパイルしたライブラリには不明ですが、gccがライブラリをコンパイルするために使用されているかどうかを知る方法はありますか? .oファイルの回避策も高く評価されています。

+2

は/ yourprogram'あなたが欲しい情報を与えるために/ 'readelfが-p .comment /パスい? –

+0

ありがとう@MarkPlotnick!これは最高です!まさに私が必要なもの!私は受け入れることができるようにこれを答えとして変換してください。 – ZDunker

答えて

2

gccおよびclangコンパイラスイートは、バージョン文字列をELFファイルの.commentセクションに配置します。 (中間アセンブリ言語ファイルを生成した場合、この文字列は.identディレクティブとして参照できます)。

GNUローダーは、入力オブジェクトファイルのすべての.commentセクションを1つのセクションにマージし、重複を排除します。

readelf -p .comment /path/to/your/objectfileを実行すると、このセクションを読むことができます。例えば、ここでは2つの再配置可能オブジェクトファイル、打ち鳴らすとgccでコンパイルした一方及び他方から作られた実行可能である。

$ readelf -p .comment hello 

String dump of section '.comment': 
    [  0] GCC: (Ubuntu 6.2.0-5ubuntu12) 6.2.0 20161005 
    [ 2d] clang version 3.8.1-12ubuntu1 (tags/RELEASE_381/final) 
関連する問題