特定の実行可能ファイルをコンパイルするために使用された GCC バージョンを取得したいと思います。試してみましたreadelf
が、情報を取得できませんでした。何かご意見はありますか?
ベストアンサー1
通常はコメント欄に保存されます
strings -a <binary/library> |grep "GCC: ("
GCC: (GNU) XXX を返します
strip -R .comment <binary>
strings -a <binary/library> |grep "GCC: ("
出力を返さない
.comment(および.note)セクションを削除してサイズを縮小することは珍しくありません。
strip --strip-all -R .note -R .comment <binary>
strip --strip-unneeded -R .note -R .comment <library>
注: busybox 文字列はデフォルトで -a オプションを指定します。これは .comment セクションに必要です。
編集: Berendra Tusla の回答とは反対に、このメソッドが機能するためにデバッグ フラグを使用してコンパイルする必要はありません。
バイナリの例:
# echo "int main(void){}">a.c
# gcc -o a a.c -s
# strings -a a |grep GCC
GCC: (GNU) 4.3.4
# strip -R .comment a
# strings -a a |grep GCC
#
オブジェクトの例:
# gcc -c a.c -s
# strings -a a.o |grep GCC
GCC: (GNU) 4.3.4
# strip -R .comment a.o
# strings -a a |grep GCC
#
-g (デバッグ) フラグがないこと、および不要なシンボルを削除する -s フラグが存在することに注意してください。.comment セクションが削除されない限り、GCC 情報は引き続き利用できます。この情報をそのまま保持する必要がある場合は、makefile (または該当するビルド スクリプト) をチェックして、-fno-ident が $CFLAGS にないこと、および $STRIP コマンドに -R .comment がないことを確認する必要があります。-fno-ident は、gcc がコメント セクションでこれらのシンボルを生成しないようにします。