0

makeユーティリティを使用してコードをコンパイルし、バイナリを取得しました。

makefileにいくつかの変更を加えて(-jいくつかのポイントに挿入して)コードを再度コンパイルし、バイナリにわずかな違いがありました。違いは「比較を超えて」によって報告されました。さらにチェックインするために、makefileを変更せずにコードを再度コンパイルしたところ、バイナリがまだ異なっていることがわかりました。

同じコードを異なる時間にコンパイルすると、(サイズと内容が)わずかに異なるバイナリが生成されるのはなぜですか?私が行った変更が正当であり、バイナリが論理的に同じであるかどうかを確認するにはどうすればよいですか?

さらに説明を求めてください。

4

2 に答える 2

1

何を構築しているのか (C、C++ など) は述べていませんが、それがタイムスタンプであっても驚かないでしょう。

構築しているバイナリ型の形式 (オペレーティング システムによって異なります) を見つけて、変化している場所にタイムスタンプがあることに意味があるかどうかを確認できます。

すべての意味を理解しやすくするために、非常に小さなバイナリを生成する小さなサンプル プログラムでこれを行うのがおそらく最も簡単です。

于 2011-03-07T07:15:59.900 に答える
0

ELF オブジェクト ファイルには、コンパイル時のタイムスタンプが含まれています。したがって、(Linux または Solaris で) コンパイルするたびに異なるオブジェクト ファイルが期待できます。オブジェクトファイルの他のシステムでも同じことがわかるかもしれません。

于 2011-03-07T07:49:15.710 に答える