2010-01-12 4 views
6

J'ai un projet de bibliothèque statique avec des options de construction de débogage/édition standard. J'ai été intrigué de constater que, tandis que le débogage .lib est un 22Mb assez volumineux, le lancement est un énorme 100Mb. Et ce n'est pas non plus une base de code massive, environ 75 classes et aucune d'entre elles très géante. Mes questions sont de savoir si c'est normal, et si je devrais m'en soucier?La version LIB est énorme par rapport au débogage

+0

Vous posez des questions sur un projet de bibliothèque statique, n'est-ce pas? –

+0

oui, désolé. édité pour clarifier. –

+0

J'ai ce problème maintenant. Avez-vous trouvé la raison? –

Répondre

1

Idéalement, la librairie de libération devrait être plus petite que celle de débogage.

Je suppose que vous pouvez liez statiquement autres libs tels que MFC, ATL etc ...

vérifier que vous relâchez et le réglage de version de débogage. Utilisez #pragma once pour éviter l'inclusion de plusieurs fichiers de temps

0

Je généralement attendre l'inverse ...

Est-il possible qu'il y ait de grands andains de code à l'intérieur préprocesseur inclus blocs qui sont inclus uniquement dans la version construit?

Le code du modèle est particulièrement suspect dans ce cas.

Mise à jour

Je pense que la question est très probablement causé par un lien vers libs statiques en mode release, et partagé libs en mode débogage ...

+1 karoberts

+0

Le code de modèle est soufflé en ligne dans les versions de débogage tout comme Release, ce qui ne risque pas d'être le problème ici. –

+0

D'accord, à moins que ce soit dans un cas #if RELEASE ou similaire. –

+0

Je ne pense pas; un compilateur/optimiseur de version peut regrouper le code du template pour presque rien. C'est une énorme différence de taille. –

1

Non , ce n'est pas normal. Il devrait être l'inverse. Oui, vous devriez vous en soucier. Je commencerais par regarder à nouveau les tailles, pour m'assurer que je n'ai pas transposé les tailles de libération et de débogage d'une manière ou d'une autre.

Ensuite, regardez les bibliothèques que vous liez pour la libération et le débogage. Avez-vous lié de manière accidentielle une bibliothèque de débogage à l'expédition et expédiez la bibliothèque pour déboguer? Observez de près vos paramètres de libération et de débogage. Quelque chose de très poisson se passe.

1

Est-il possible qu'une quantité massive de ce code soit en ligne et que la version de débogage ne soit pas "inline"?

4

Je vérifie pour voir si vous liez statiquement les bibliothèques en mode édition et les reliez dynamiquement en mode débogage. Vous pouvez être lié de manière statique au runtime C++ par exemple.

+0

+1: Été là. – Dathan

+0

En supposant qu'il pose des questions sur un projet de bibliothèque statique, la bibliothèque statique n'est jamais liée à quoi que ce soit dans le projet. La liaison des bibliothèques statiques ne se produit que lorsque la bibliothèque est utilisée. –

+0

Corriger Neil. Aucun lien ici, seulement #includes externes –

0

Il y a une chose qui peut expliquer une telle taille: les symboles de débogage incorporés dans la version release (par opposition à construit en tant que pdb). Êtes-vous sûr de ne pas avoir généré de symboles de débogage pour votre build de version? (quel visuel C++ utilisez-vous?)

+0

2008. PDB/informations de débogage est un domaine que je prévois de regarder de près ... Je génère généralement PDB pour la version et le débogage, mais cela devrait être un fichier distinct. –

+0

ok. coupable peut être/Z7 et/ou/Yd si vous utilisez des fichiers pch. Vous pourriez vouloir fournir toutes les options que vous utilisez sur votre ligne de commande. – Bahbar

3

J'ai eu le même problème. La solution est très simple. Projet propriété/propriétés Configuration/General/Programme d'optimisation Toute utilisation Aucun programme entier d'optimisation au lieu de Utiliser Time Code lien Génération. La taille de ma bibliothèque statique est passée de 5 Mo à 1.3MB

+0

Je ne sais pas pourquoi, mais c'était la raison pour moi. Il ne devrait pas vraiment être un problème à moins que vous déployiez les fichiers .lib quelque part. Si vous les maintenez juste locales à votre solution, vous devriez être bien parce que le fichier .exe ou .dll qui consomme le lib statique éliminera le matériel dont il n'a pas besoin. Ma question: http://stackoverflow.com/questions/2472568/visual-c-9-0-2008-static-lib-boost-library-large-lib-file – CuppM

Questions connexes