2010-01-15 15 views
12

Mi equipo y yo estamos desarrollando un proyecto de VC++ 6. Todos estamos usando la misma base de código (usando el sistema de control de versiones), y todas nuestras configuraciones de compilador/enlazador/entorno (que incluyen el orden de directorios), por lo que podemos ver, son exactamente iguales. Por supuesto, estamos usando la misma versión de VC++ con los mismos service packs (VC6 SP6).¿Por qué construir el mismo proyecto genera un archivo EXE diferente para cada desarrollador?

El problema es que el EXE que cada uno de nosotros construye es un poco diferente.

Sé que cada vez que compila un EXE en la misma computadora, hay 3 ubicaciones en el archivo donde el vinculador almacena una marca de tiempo. No estoy hablando de estas diferencias.

Aunque nuestros archivos EXE tienen exactamente la misma longitud, cuando comparamos los EXEs, , hay miles de bytes diferentes. Muchos de esos bytes difieren en valor 0x20.

¿Alguna idea de cuál puede ser el motivo?

Editar: Compilación de depuración (En realidad, no verificamos el lanzamiento).

Editar: Las diferencias están en secciones binarias, no en cadenas de texto.

Editar: Todos los desarrolladores están utilizando los mismos nombres de unidad/carpeta, para fuente y para productos.

+0

Supongo que está preguntando sobre la versión de lanzamiento, ¿verdad? –

Respuesta

5

Si la versión Debug tiene la opción "Enlace incrementalmente" marcada, entonces probablemente sea la razón de los difficiles.

+0

¿Puedes por favor elaborar? –

+2

es solo una suposición. Los enlaces incrementales agregan cierta información de depuración cada vez que construyes el proyecto. No crea un exe * clean * –

+0

Lo verificaré el domingo. Gracias. –

0

Solo supongo: partes no inicializadas de cadenas o propiedades de cadena de cierta longitud donde el # 0 no está al final?

4

Dado que 0x20 es la diferencia entre los caracteres ASCII en mayúscula y minúscula, me pregunto si estas diferencias se encuentran en las rutas de archivos que el compilador/vinculador incrustan en el binario (¿acaso afirman mensajes?). ¿Podrían los árboles de desarrollo ser diferentes ("C: \ DevTrees \ MyProject \ SuperFoo" en un cuadro y "E: \ work \ projects \ superfoo" en otro?).

1

Puede ser coincidencia, pero 0x20 es la diferencia entre los valores de caracteres ASCII en minúsculas y mayúsculas (por ejemplo, 'A' == 65 == 0x41, 'a' == 97 = 0x61).

3

Estoy de acuerdo con lo que NickD dice. Durante la depuración, el enlace incremental está en lo que no reconstruye el exe desde cero, pero agrega/inserta/elimina código aquí y allá para cada compilación.

I.e. el diseño del exe depende de cada compilación desde el primero.

Una compilación limpia debería arrojar resultados idénticos en compiladores idénticos.

Cuestiones relacionadas