2010-07-26 3 views
7

J'ai une bibliothèque statique compilée en C++ d'environ 15 classes et leurs fonctions membres et d'autres choses, et compilée, c'est presque 14 mégaoctets. Il est lié à la bibliothèque de table de hachage dense de Google et à MPIR, qui ressemble à GMP pour Windows, mais je l'ai fait dans un fichier EXE simple et il y avait quelques kilo-octets. Pourquoi est-ce si massif? Que puis-je faire pour réduire sa taille? Il semble qu'il y a d'autres programmes qui sont beaucoup plus compliqués que les miens et qui sont beaucoup plus petits.Pourquoi ma bibliothèque statique est-elle si énorme?

compilé avec Visual C++, ligne de commande est la suivante:

/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

Pouvez-vous donner des informations plus spécifiques? Compilateur, drapeaux de compilation, etc. – Dusty

+0

Compilé avec Visual C++, ligne de commande est: /Zi/nologo/W3/WX/O2/Oi/Oy-/GL/D "WIN32"/D "NDEBUG"/D « _CONSOLE "/ D" _UNICODE "/ D" UNICODE "/ Gm-/EHsc/GS/Gy/fp: précise/Zc: wchar_t/Zc: forScope /Fp" Release ".pch"/Fa "Release \"/Fo " Release \ "/Fd"Release\vc100.pdb"/Gd/analysis-/errorReport: file d'attente – Foglio

+0

Ligne de commande *, pas de drapeaux. – Foglio

Répondre

16

La bibliothèque statique est un format différent considérablement le binaire fini; en partie parce qu'il a un peu plus d'informations. Essentiellement, la bibliothèque statique agit comme un ZIP de tous les fichiers .obj générés à partir de vos unités de traduction. Cela permet à l'éditeur de liens de supprimer les fonctions inutilisées et, si vous utilisez LTCG, cela permet à l'éditeur de liens de prendre des décisions inter-modules et d'autres optimisations.

En outre, certains modes de compilation intégrera les symboles de débogage directement dans le .lib, en supprimant la nécessité pour les fichiers pdb séparés.

Généralement, vous ne devriez pas avoir à vous soucier de la taille de la bibliothèque statique; l'éditeur de liens jette toutes les informations supplémentaires lors de la construction de l'exécutable final.

+0

L'éditeur de liens jette également le code redondant et mort, etc. – greyfade

+0

@greyfade: En fait, le compilateur fait que;) –

+0

@Billy ONeal: A * Temps de lien *? – greyfade

Questions connexes