特定のバイナリがコンパイルされた gcc フラグを調べる方法はありますか?
4 に答える
GCC のドキュメントをざっと見ても、何も見つかりません。
Boost 関係者は、世の中で最も賢い C++ 開発者の 1 人であり、命名規則に頼っています。これは通常、他の方法では不可能だからです (結局のところ、実行可能ファイルは、任意の数の言語で、任意の数のコンパイラ バージョンで作成できた可能性があります)。 )。
(後で追加): コードをコンパイルするときに要求された場合、GCCには4.3でこの機能があることがわかります:
新しいコマンド ライン スイッチ -frecord-gcc-switches ... を使用すると、コンパイラの呼び出しに使用されたコマンド ラインが、作成中のオブジェクト ファイルに記録されます。この記録の正確な形式は、ターゲットおよびバイナリ ファイル形式に依存しますが、通常は ASCII テキストを含むメモ セクションの形式をとります。
実験的証明:
diciu$ gcc -O2 /tmp/tt.c -o /tmp/a.out.o2
diciu$ gcc -O3 /tmp/tt.c -o /tmp/a.out.o3
diciu$ diff /tmp/a.out.o3 /tmp/a.out.o2
diciu$
バイナリが同一であるため、私はそれをノーと見なします。
ブライアンに最初にこれを投稿するよう依頼したのは私です。私の質問は、samba バイナリに関するものでした。実行smb -b
して、それがどのように構築されたかに関する情報を取得できることがわかりました。
私はそうは思わない。
デバッグ シンボルがあるかどうかはわかりますが、これは -g が使用されたことを意味します;) しかし、たとえば、インクルード ヘッダーの検索に使用されたディレクトリを調べる方法は思いつきません。
特定のフラグのみをターゲットにすると、より良い答えが得られる可能性があります。たとえば、このバイナリがコンパイルされたときにフラグ「...」が設定されたかどうかだけを知りたい場合。その場合、これはどのフラグになりますか?