12

私のチームと私は VC++ 6 プロジェクトを開発しています。私たちは皆、同じコードベース (バージョン管理システムを使用) を使用しており、すべてのコンパイラ/リンカー/環境設定 (インクルード ディレクトリの順序を含む) は、私たちが知る限り、まったく同じです。もちろん、同じサービス パック (VC6 SP6) で同じ VC++ バージョンを使用しています。

問題は、私たち一人一人が構築する EXE が少しずつ異なることです。

同じコンピューターで EXE をビルドするたびに、リンカーがタイムスタンプを保存するファイルに 3 つの場所があることを知っています。私はこれらの違いについて話しているのではありません。

EXE ファイルの長さはまったく同じですが、EXE を比較すると、1000 バイトもの違いがあります。これらのバイトの多くは、値が 0x20 異なります。

何が原因でしょうか?

編集:ビルドをデバッグします(実際には、リリースを確認していませんでした)。

編集: 違いは、テキスト文字列ではなく、バイナリ セクションにあります。

編集: すべての開発者は、ソースと製品に同じドライブ/フォルダー名を使用しています。

4

5 に答える 5

5

バージョンに「インクリメンタルにリンク」オプションがチェックされている場合Debug、おそらくそれが差分の理由です。

于 2010-01-15T08:25:55.883 に答える
4

0x20は大文字と小文字のASCII文字の違いなので、これらの違いは、コンパイラ/リンカーがバイナリに埋め込んだファイルパスにあるのではないかと思います(おそらくメッセージをアサートしますか?)。開発ツリーが異なる可能性があります(1つのボックスの「C:\ DevTrees \ MyProject \ SuperFoo」と別のボックスの「E:\ work \ projects \ superfoo」)。

于 2010-01-15T08:20:49.650 に答える
3

NickDの言うことに同意します。デバッグ中、インクリメンタル リンクは exe を最初から再構築するのではなく、ビルドごとにあちこちにコードを追加/挿入/削除します。

つまり、exe のレイアウトは、最初のコンパイル以降のすべてのコンパイルに依存します。

クリーン ビルドは、同一のコンパイラで同一の結果をもたらすはずです。

于 2010-01-15T08:51:31.193 に答える
1

偶然の一致かもしれませんが、0x20は小文字と大文字のASCII文字の値の差です(例:'A' == 65 == 0x41、'a' == 97 = 0x61)。

于 2010-01-15T08:22:03.360 に答える
0

推測:文字列の初期化されていない部分、または#0が末尾にない特定の長さの文字列プロパティ?

于 2010-01-15T08:19:33.707 に答える