2017-12-07 27 views
0

シナリオ: (gccのあるLinuxの)C++プロジェクトのビルドは、新しいマシンで繰り返されることになっています。Linux/gcc:ビルドが別のマシンの以前のビルドと同一かどうかを確認する方法はありますか?

非常に同じgccバージョンがビルドに使用されている場合: ビルド出力(バイナリ)は同じですか?あるいは、バイナリに含まれるタイムスタンプ、パス、またはその他の情報によって、それらが異なっていますか? 出力が同じでない場合:バイナリが「機能的」なのかどうかを比較する方法はありますか?私。バイナリ内の実際のコード(デバッグ情報などのメタデータなし)を単に比較するツールを呼び出すことはできますか?

動機: ソフトウェアシステム(誰かが開発した、それをXと呼ぶ)を構築する必要がある、クリーンな新しいLinuxシステムを用意する必要があります。 ソフトウェアをビルドするために、ビルドスクリプト、メイクファイルなどでソースツリーを取得します。 ビルド出力がXで提供された最後のビルドと同じであることを確認する必要があります。私はXからバイナリ形式で入手した最後のバージョンをビルドするために使用されたソースが同じであることを確認するためにこれを行う必要があります。

+0

2つのファイルで 'objdump -d FILE'コマンドの出力の' diff'コマンドを使って違いを比較しようとしましたか? – Oliv

+0

あなたの究極の目標は何ですか?バイナリ互換性、または機能上の正確さ?前者は何らかのABIに合意する必要があり、後者は体系的なテストがすべて私が想定していることです。 –

+0

@MassimilianoJanes:これの背後にある動機づけを説明するために質問を編集しました。 – DrP3pp3r

答えて

1

非常に同じgccバージョンビルド用:ビルド出力(バイナリ)は同じですか?

CPUはGCCのバージョンと静的リンクのバージョンよりも何らかの変更が加えられました。あなたが探している答えはhereだと私は信じています。

「それは依存する」ことは基本的に沸騰します。 はRICIによってリンクされ答え引用:

をCPUが類似している(そしてその後も、それが可能だ)しない限り、バイナリが異なる可能性がある

そしてOlivようobjdumpも良い方法である、と述べました違いを比較する。

+0

興味深い。 ARM用にクロスコンパイルしているので、CPU固有の最適化問題は、ホストCPUがターゲットの最適化に影響を与えてはならないので、なくなるはずです。 – DrP3pp3r

関連する問題