Comment réduire la taille de l'executable produite par MinGW compilateur g++?
J'ai une simple "Hello world", un programme C++ est compilé en 500kB exécutable par MinGW compilateur g++ sous Win XP.
Certains disent que c'est causé par iostream de la bibliothèque et de lien statique de libstdc++.dll.
À l'aide de -s linker option a aidé un peu (réduction de 50% de la taille), mais je serait satisfaite que par <10kB exécutable. Est-il possible que la façon de réaliser cela en utilisant le compilateur MinGW? La portabilité n'est pas une grande préoccupation pour moi.
Est-il possible de copier libstdc++.dll avec l'exécutable à l'aide de la liaison dynamique? Si oui, comment faire?
Résolu: j'ai été en utilisant MinGW 3.4. Maintenant, j'ai mis à jour pour la dernière MinGW 4.6 et la taille a diminué de 90% à 50 ko, avec -s option, même à 9 ko, ce qui est amplement suffisant. De toute façon - je remercie tout le monde pour obtenir de l'aide. Ici, vous allez mes résultats
C++ Bonjour tout le Monde programme à l'aide iostream
MinGW | no options | -s option
------------------------------
3.4 | 500kB | 286 kB
4.6 | 50kB | 9 kB
-shared-libstdc++
pour compiler et lier dynamiquement contre libstdc++.dll, et -Os
pour optimiser le binaire pour la taille.Bien que l'onu, le C++, vous pouvez essayer de
printf()
. Je ne suis pas sûr de savoir comment beaucoup de ces mêmes dépendances qu'il partage avec la bibliothèque iostream. De sorte qu'il peut ou ne peut pas faire plus petit.g++: error: unrecognized option '-shared-libstdc++'
en utilisant MinGW 4.6Oui, je pense que dans GCC 4.6, votre générés les fichiers binaires sont en conformité avec la taille normale prévue par une commune libstdc++ sur Linux avec GCC 4.6 un simple 'bonjour le monde' application est de 8 KO pour moi. De MinGW GCC 3.4 généré tailles sont que les grands puisqu'il n'y a pas de notion de partage des libstdc++ encore.
Sous les versions ultérieures de MinGW où les bibliothèques sont liées de façon dynamique, la liaison statique des bibliothèques standard peut être forcé avec
-static-libgcc
(C) ou -static-libstdc++
(C++).OriginalL'auteur Jan Turoň | 2011-11-01
Vous devez vous connecter pour publier un commentaire.
Indicateurs à utiliser:
-s
comme vous l'avez fait pour la bande de symboles-lstdc++_s
pour spécifier liées dynamiquement à l'encontre de lalibstdc++.dll
-Os
pour optimiser le binaire de taille.Par défaut mingw statique des liens vers
libstdc++.a
sur Windows.Noter que le
lstdc++_s
drapeau est seulement dans MinGW GCC > 4.4, je crois.d:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../../../mingw32/bin/ld.exe: cannot find -lstdc++_s
En regardant mingw notes de mise à jour, ils ont changé de manière dynamique reliant libstdc++ en 4.5.x, de sorte que devrait être la valeur par défaut en 4.6, et je suppose qu'ils se sont retirés de la bibliothèque de l'indicateur. Vous ne savez pas si vous êtes encore en les reliant de manière statique à l'encontre de libstdc++, mais vous pourriez exécuter DependencyWalker ou
ldd
sur votre binaire pour voir si c'est vrai.ldd
n'est pas trouvé etld
supprime le fichier exécutable(?) fait-il partie de MinGW ou Msys?un Linux/Unix outil qui vous permet de savoir ce que les bibliothèques binaires liens, il y a une MinGW équivalent windows fournie par le altbinutils-pe le paquet. Dependency Walker / depends.exe est un outil que vous pouvez installer seul (également livré avec Visual Studio) qui fournit une interface graphique qui vous permet de savoir ce qu'est un binaire des liens vers.
ld
est une commande différente, et est gcc de l'éditeur de liens.Le
-s
option s'applique aux bibliothèques qui doit le symbole des noms à être appelé?OriginalL'auteur wkl
Donner
bande
et UPX un essai.OriginalL'auteur genpfault
À l'aide de l'-Os drapeau peut aider. Qui optimise la taille.
OriginalL'auteur offtehcuff
Vous devriez être en utilisant -O pour l'optimisation. Ajouter "-O{niveau}" à votre compilateur args et il permettra d'optimiser pour la vitesse ou la taille. Vérifiez la documentation de votre compilateur.
Vous pourriez aussi avoir les symboles de débogage activé. Décapage ceux-ci sont également le rendre plus petit.
OriginalL'auteur Jamie Carl