2010-01-15 5 views
12

Il mio team e io stiamo sviluppando un progetto VC++ 6. Utilizziamo tutti lo stesso code-base (utilizzando il sistema di controllo della versione) e tutte le nostre impostazioni di compilatore/linker/ambiente (incluso l'ordine delle directory), per quanto possiamo dire, sono esattamente le stesse. Ovviamente stiamo usando la stessa versione VC++ con gli stessi service pack (VC6 SP6).Perché la creazione dello stesso progetto genera file EXE diversi per ogni sviluppatore

Il problema è che l'EXE creato da ognuno di noi è leggermente diverso.

So che ogni volta che si crea un EXE sullo stesso computer, ci sono 3 posizioni nel file in cui il linker memorizza un timestamp. Non sto parlando di queste differenze.

Sebbene i nostri file EXE abbiano esattamente la stessa lunghezza, quando confrontiamo gli EXE, ci sono migliaia di byte che differiscono. Molti di questi byte differiscono di 0x20 in valore.

Qualche idea su quale potrebbe essere il motivo?

Modifica: creazione di debug (in realtà, non è stato controllato il rilascio).

Modifica: le differenze sono nelle sezioni binarie, non nelle stringhe di testo.

Modifica: tutti gli sviluppatori utilizzano gli stessi nomi di unità/cartella, per origine e per prodotti.

+0

Suppongo che tu stia chiedendo della versione di rilascio, giusto? –

risposta

5

Se la versione Debug ha l'opzione "Collega in modo incrementale", allora probabilmente è il motivo delle differenze.

+0

Potete per favore elaborare? –

+2

è solo una supposizione. Il collegamento incrementale aggiunge alcune informazioni di debug ogni volta che si crea il progetto. Non crea un * clean * exe. –

+0

Lo controllerò domenica. Grazie. –

0

Solo un'ipotesi: parti non inizializzate di stringhe o proprietà di stringa di una certa lunghezza in cui il # 0 non è alla fine?

4

Poiché 0x20 è la differenza tra caratteri ASCII maiuscoli e minuscoli, mi chiedo se queste differenze si verificano nei percorsi di file che il compilatore/linker incorpora nel file binario (asserire messaggi forse?). I tuoi alberi di sviluppo potrebbero essere diversi ("C: \ DevTrees \ MyProject \ SuperFoo" su una casella e "E: \ work \ projects \ superfoo" su un'altra?).

1

Potrebbe essere una coincidenza, ma 0x20 è la differenza tra i valori dei caratteri ASCII minuscoli e maiuscoli (es. 'A' == 65 == 0x41, 'a' == 97 = 0x61).

3

Sono d'accordo con ciò che NickD dice. Durante il debug, è in corso il collegamento incrementale che non ricostruisce exe da zero, ma aggiunge/inserisce/rimuove il codice qua e là per ogni build.

I.e. il layout dell'exe dipende da ogni compilation dal primo.

Una build pulita dovrebbe fornire risultati identici su compilatori identici.