2 台の異なるマシンが同一のビルドを生成することを確認しようとしています。環境をできる限り似たものにしようとしましたが、生成された .obj ファイルと .exe ファイルにはまだいくつかの違いがあります。埋め込まれたパスの違いとタイムスタンプを除外できました。また、最小限のコード例 (hello world プログラムが実際に同一のバイナリを生成するように) を保証しました。
現在、一部のオブジェクト ファイルは類似しており、他のファイルは類似していません。diff を使用して異なるものをdumpbin /all
見ると、次のような違いがあります。
> COMDAT; sym= "public: static int const std::numeric_limits<long double>::max_exponent" (?max_exponent@?$numeric_limits@O@std@@2HB)
< COMDAT; sym= "public: static int const std::_Locbase<int>::collate" (?collate@?$_Locbase@H@std@@2HB)
の多くでSECTION HEADER
。100% 証明したわけではありませんが、それぞれの違いは、他のオブジェクト ファイルからダンプされた出力の別のセクションで発生する行にあるように思えます。そのため、物事は別の順序で行われているようです。(ただし、これは私の現在の仮定にすぎないことに注意してください。間違っている可能性があります。)
ここから先に進む方法とその原因についてのヒントはありますか? ビルド/リンク順?
Microsoft が次のように書いていることも確認しました。
注: 連続するビルドで同じソース ファイルをビルドする場合、Visual C++ が同じバイナリ イメージを生成するという保証はありません。ただし、実行時に EXE (または DLL) がまったく同じように動作し、他のすべての条件が同じであることが保証されています。
しかし、私の特定のケースで何が起こっているのかまだ疑問に思っています。私の場合、同じマシンでの連続したビルドは同一のビルドを提供します。