2010-01-15 2 views
12

Mein Team und ich entwickeln ein VC++ 6-Projekt. Wir verwenden alle die gleiche Code-Basis (mit Versionskontrollsystem), und alle unsere Compiler/Linker/Environment-Einstellungen (einschließlich der Reihenfolge der Verzeichnisse), soweit wir das beurteilen können, sind genau die gleichen. Natürlich verwenden wir die gleiche VC++ Version mit den gleichen Service Packs (VC6 SP6).Warum das gleiche Projekt erstellt generiert unterschiedliche EXE-Datei für jeden Entwickler

Das Problem ist, dass die EXE, die jeder von uns baut, ein bisschen anders ist.

Ich weiß, dass jedes Mal, wenn Sie eine EXE auf demselben Computer erstellen, gibt es 3 Positionen in der Datei, wo der Linker einen Zeitstempel speichert. Ich spreche nicht über diese Unterschiede.

Obwohl unsere EXE-Dateien sind genau die gleiche Länge, wenn wir die EXEs vergleichen, gibt es Tausende von Bytes, die sich unterscheiden. Viele dieser Bytes unterscheiden sich um 0x20 in Wert.

Irgendeine Idee, was der Grund sein könnte?

Edit: Debugbuild (Eigentlich haben wir die Freigabe nicht überprüft).

Edit: Die Unterschiede sind in binären Abschnitten, nicht in Text-Strings.

Edit: Alle Entwickler verwenden die gleichen Laufwerk/Ordner-Namen, für die Quelle und für Produkte.

+0

Ich nehme an, dass Sie nach der Release-Version fragen, richtig? –

Antwort

5

Wenn Debug Version die Option "Link inkrementell" aktiviert hat, dann ist das wahrscheinlich der Grund für die Diffs.

+0

Können Sie bitte ausarbeiten? –

+2

ist es nur eine Vermutung. Die inkrementelle Verknüpfung fügt bei jedem Erstellen des Projekts einige Debug-Informationen hinzu. Es erstellt keine * clean * exe. –

+0

Ich werde es am Sonntag überprüfen. Vielen Dank. –

0

Nur eine Vermutung: nicht initialisierte Teile von Strings oder String-Eigenschaften einer bestimmten Länge, wo die # 0 ist nicht am Ende?

4

Da 0x20 der Unterschied zwischen Groß- und Kleinbuchstaben ASCII-Zeichen ist, frage ich mich, ob diese Unterschiede in Dateipfaden sind, die der Compiler/Linker in der Binärdatei einbetten (Meldungen vielleicht geltend machen?). Könnten deine Entwicklungsbäume anders sein ("C: \ DevTrees \ MyProject \ SuperFoo" auf einer Box und "E: \ work \ projects \ superfoo" auf einer anderen?).

1

Es könnte Zufall sein, aber 0x20 ist die Differenz zwischen den Werten von Klein- und Großbuchstaben (zB 'A' == 65 == 0x41, 'a' == 97 = 0x61).

3

Ich stimme dem zu, was NickD sagt. Während des Debuggens wird die inkrementelle Verknüpfung ausgeführt, bei der die EXE nicht von Grund auf neu erstellt wird, sondern Code für jeden Build hier und dort angehängt/eingefügt/entfernt wird.

I.e. Das Layout der EXE hängt von jeder Kompilation seit der ersten ab.

Ein sauberer Build sollte bei identischen Compilern identische Ergebnisse liefern.

Verwandte Themen