2010-01-12 12 views
6

Tengo un proyecto de biblioteca estática con opciones de compilación de versión/depuración estándar. Me intrigó ver que mientras el .lib de depuración es bastante grande, 22Mb, el lanzamiento es de unos 100Mb. Y tampoco es una base de código masiva, alrededor de 75 clases y ninguna de ellas es muy gigante.La versión LIB es enorme en comparación con la depuración

Mis preguntas son si esto es normal y si me debería importar?

+0

Usted pregunta por un proyecto de biblioteca estática, ¿verdad? –

+0

sí, lo siento. editado para aclarar –

+0

Tengo este problema ahora. ¿Encontraste el motivo? –

Respuesta

1

Lo ideal es que release lib sea más pequeño que debug one.

supongo que es posible que se vincula estáticamente otras librerías como MFC, ATL etc ...

comprobar que suelte y valor de depuración de construcción.

use #pragma once para evitar la inclusión de múltiples archivos de tiempo.

0

normalmente yo esperaría lo contrario ...

¿Es posible que hay grandes extensiones de código dentro de preprocesador incluye bloques que sólo se les incluidos en las versiones de lanzamiento?

El código de la plantilla es especialmente sospechoso en este caso.

actualización

Creo que el problema es muy probablemente causado mediante la vinculación a bibliotecas estáticas en modo de lanzamiento, y libs en el modo de depuración compartida ...

+1 karoberts

+0

El código de la plantilla se destruye en línea en compilaciones de depuración igual que en Liberar, por lo que probablemente este no sea el problema aquí. –

+0

De acuerdo, a menos que esté en #if RELEASE o caso similar. –

+0

No lo creo; un compilador de lanzamiento/optimización puede doblar el código de la plantilla casi sin nada. Esta es una gran diferencia de tamaño. –

1

n , esto no es normal. Debería ser de otra manera. Sí, deberías importarte.

Comenzaré mirando los tamaños otra vez, para asegurarme de que no transpongo los tamaños de versión y depuración de alguna manera.

A continuación, consulte las bibliotecas que está vinculando para la versión y la depuración. ¿Vinculaste accidentalmente una biblioteca de depuración para enviar y enviar la biblioteca para depurar?

Eche un vistazo de cerca a su configuración de versión y depuración. Algo muy sospechoso está sucediendo.

1

¿Es posible que una gran cantidad de este código esté en línea, y la versión de depuración no está "en línea"?

4

Verificaría si está enlazando estáticamente las bibliotecas en modo de lanzamiento y vinculándolas dinámicamente en el modo de depuración. Es posible que esté enlazando estáticamente el tiempo de ejecución de C++, por ejemplo.

+0

+1: estado allí. – Dathan

+0

Suponiendo que pregunta por un proyecto de biblioteca estática, la biblioteca estática no está vinculada con nada en el proyecto. La vinculación de las bibliotecas estáticas solo se produce cuando se utiliza la biblioteca. –

+0

Corregir Neil. No hay enlaces aquí, solo externos #includes –

0

Hay una cosa que puede explicar tal tamaño: símbolos de depuración integrados en la compilación de lanzamiento (en lugar de construidos como pdb). ¿Estás seguro de que no tienes símbolos de depuración generados para tu versión de lanzamiento? (¿qué C++ visual estás usando?)

+0

2008. La información de PDB/depuración es un área que planeo examinar de cerca ... Generalmente creo PDB para release & debug, pero debería ser un archivo separado. –

+0

bien. Culprit podría ser/Z7 y/o/Yd si usa archivos pch. Es posible que desee proporcionar todas las opciones que está utilizando en su línea de comandos. – Bahbar

3

Tuve el mismo problema. La solución es muy simple./Configuración del proyecto propiedad propiedades/Programa General/Whole uso Optimización Entero Sin optimización del programa en lugar de Uso Enlace Tiempo de generación de código. El tamaño de mi biblioteca estática disminuyó de 5 MB a 1.3MB

+0

No estoy seguro por qué, pero esta fue la razón para mí. En realidad, no debería ser un problema a menos que implemente los archivos .lib en algún lugar. Si solo los mantiene locales para su solución, debería estar bien porque el archivo .exe o .dll que consume la lib estática eliminará las cosas que no necesita. Mi pregunta: http://stackoverflow.com/questions/2472568/visual-c-9-0-2008-static-lib-boost-library-large-lib-file – CuppM

Cuestiones relacionadas