Estoy compilando una biblioteca estática que contiene principalmente clases con plantillas. Cuando se compila con gcc, el archivo .a resultante tiene alrededor de la marca de 40Mb. Esto es bastante grande, pero no del todo inesperado debido a la cantidad de plantillas que están sucediendo. Sin embargo, cuando compilo el mismo código usando VS2005, el archivo .lib resultante está llegando al (esperar a que!) 575Mb ..Enorme archivo de biblioteca estática cuando se compila con VS2005, tamaño normal cuando se compila con gcc
Ahora, antes de que me quemo, he visto: How can I get my very large program to link? y esto es útil para Entender que las plantillas pueden hacer que las librerías sean grandes, pero me cuesta entender por qué las salidas de los dos compiladores son de un tamaño tan diferente.
opcionesVS son: (depuración)
/Od /D "WIN32" /D "_DEBUG" /D "_LIB" /D "_WIN32_WINNT=0x0500" /D "_MBCS" /Gm /EHsc /RTC1 /MDd /W4 /nologo /c /Wp64 /Zi /TP /errorReport:prompt
(Release)
/O2 /D "WIN32" /D "NDEBUG" /D "_LIB" /D "_WIN32_WINNT=0x0500" /D "_MBCS" /FD /EHsc /MD /W4 /nologo /c /Wp64 /Zi /TP /errorReport:prompt
Cualquier comentario o sugerencias son muy apreciadas ..
Está construyendo una compilación Debug en VS2005 ('/ D" _DEBUG "') - ¿Es esto lo mismo que GCC? Esto puede hacer una gran diferencia. –
Tienes razón, lo hace ... La versión de compilación de lanzamiento en VS2005 es * solo * 350Mb .. ¡Sin embargo, no es ni mucho menos lo suficientemente pequeña! – StevieG
¿Está utilizando generación de código Linktime (LTCG)? Esto hace que las bibliotecas estáticas sean muy grandes y luego el optimizador reduce el código final al momento del enlace. –