2010-07-26 12 views
7

Tengo una biblioteca estática compilada en C++ de unas 15 clases y sus funciones de miembro y esas cosas, y compilada, son casi 14 megabytes. Se vincula a la biblioteca de tabla hash densa de Google y MPIR, que es como GMP para Windows, pero lo hice en un exe simple y fue de unos pocos kilobytes. ¿Por qué es tan masivo? ¿Qué puedo hacer para reducir su tamaño? Parece que hay otros programas que son mucho más complicados que los míos y que son mucho más pequeños.¿Por qué mi biblioteca estática es tan grande?

compilado con Visual C++, línea de comandos es:

/Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" 
/D "_UNICODE" /D "UNICODE" /Gm- /EHsc /GS /Gy /fp:precise /Zc:wchar_t 
/Zc:forScope /Fp"Release\ang.pch" /Fa"Release\" /Fo"Release\" 
/Fd"Release\vc100.pdb" /Gd /analyze- /errorReport:queue 
+0

¿Puedes darnos alguna información más específica? Compilador, indicadores de compilación, etc. – Dusty

+0

Compilado con Visual C++, la línea de comandos es: /Zi/nologo/W3/WX-/O2/Oi/Oy-/GL/D "WIN32"/D "NDEBUG"/D "_CONSOLE "/ D" _UNICODE "/ D" UNICODE "/ Gm-/EHsc/GS/Gy/fp: precise/Zc: wchar_t/Zc: forScope /Fp"Release\ang.pch"/Fa "Release \"/Fo " Release \ "/Fd"Release\vc100.pdb"/Gd/analyze-/errorReport: queue – Foglio

+0

Línea de comando *, no banderas. – Foglio

Respuesta

16

La biblioteca estática es un formato muy diferente al binario acabado; en parte porque tiene bastante más información. Básicamente, la biblioteca estática actúa como un ZIP de todos los archivos .obj generados a partir de sus unidades de traducción. Esto permite que el vinculador elimine las funciones no utilizadas, y si está utilizando LTCG, le permite al inliner tomar decisiones de varios módulos y otras optimizaciones similares.

Además, algunos modos de compilación incrustarán los símbolos de depuración directamente en .lib, eliminando la necesidad de archivos .pdb separados.

Generalmente, no debería tener que preocuparse por el tamaño de la biblioteca estática; el enlazador arrojará toda la información adicional al construir el ejecutable final.

+0

El enlazador también arroja código muerto y redundante, etc. – greyfade

+0

@greyfade: En realidad, el compilador hace eso;) –

+0

@Billy ONeal: ¿A * tiempo de enlace *? – greyfade

Cuestiones relacionadas