2012-07-12 7 views
10

Tenemos un gran proyecto, más de 1 millón de líneas de código en aproximadamente 300 DLL. Hasta ahora hemos estado usando VS6.Enorme OBJ archivos en VS2008 C++ compilación en comparación con VS6

Ahora he convertido todo a VS2008, todas las compilaciones, enlaces y más importante: ¡se ejecuta!

==> Sin embargo ... los archivos compilados OBJ resultantes son X 10 más grandes y la vinculación es extremadamente lenta, con el enlazador golpeando> 1GB de memoria con bastante frecuencia.

Parte de las implicaciones son que necesito compilar ciertos argumentos con/bigobj.

El resultado es una construcción que pasó de aproximadamente 1:45 en un escritorio a 3 horas. Las DLL y las LIBS son aproximadamente del mismo tamaño que en la versión anterior de VS6.

He leído todo lo que he podido encontrar aquí pero no he encontrado una solución a este problema. Si es información de DEPURACIÓN adicional, no lo quiero. Ya tuve suficiente antes. El tamaño en la versión aumentó, pero no tanto ...

¿Alguien tiene alguna idea? ¿O es mi única opción dividir los proyectos en unidades mucho más pequeñas? ¿Refactorizar es mi única esperanza? Seguramente hay una bandera secreto echaba de menos ...


Edit1 (13/07/2012 12: 20BST) He comparado dumpbin de un obj creado por VS6 vs VS2008. El de 2008 aparece como si estuviera "enlazando estáticamente". En VS6 contiene algunos símbolos todos de la DLL actual. En VS2008 contiene símbolos de (probablemente) todas las bibliotecas de las que depende. Los tamaños de Dumpbin son 66kb y 32,000kb para VS6 y VS2008, respectivamente.


+2

Intenta deshabilitar la "información de depuración" en la configuración del proyecto (rama C++). –

+7

_ "Tenemos un gran proyecto,> 1M de líneas de código en aproximadamente 300 DLL. Hasta ahora hemos estado usando VS6." _ Nunca volveré a quejarme de mi trabajo. – Luke

+0

@IvanShcherbakov - ¿esto no me impedirá depurar fácilmente? – aabramovich

Respuesta

5

Compruebe sus opciones de depuración. /Z7 provoca archivos .OBJ grandes, /Zi pone la misma información en un archivo .PDB separado.

La opción del compilador /Oi puede ayudar al delimitar la función intrínseca, que luego ya no necesita vincularse. Probablemente no desee depurar memset de todos modos.

Desactive /Gm (reconstrucción incremental) para que pueda activar /MP (compilación paralela). También apague /Gy - mientras que hace EXE más pequeños, causa archivos OBJ más grandes y enlaces más lentos.

+0

Gracias @MSalters. Usamos/ZI. Usamos/MP, y GY está desactivado. También jugué con enlaces incrementales vs. no incrementales. No incremental es doloroso. Muy. Agregando/Oi ahora - informará en 12h – aabramovich

+0

El enlace incremental se queda sin memoria y no puedo encontrar una manera de eludirlo.El tamaño de los objetos se ha reducido en un 25%, pero todavía son enormes. No puedo usar el indicador/3GB como muchos los desarrolladores (erm) usan computadoras portátiles que tienen 3GB en total ... Intentaré cambiar el sistema operativo, ya que tengo XP ... – aabramovich

+1

El indicador '/ 3GB' se refiere al espacio de dirección para el ejecutable creado, y no afecta al compilador o al enlazador. Además, eso es espacio de direcciones de 3GB, que incluye archivos mapeados en memoria, no RAM. – MSalters