Comment réduire la taille de l'exécutable produit par MinGW compilateur g++?

j'ai un programme trivial "Hello world" C++ qui est compilé à 500kB exécutable par MinGW g++ compilateur sous Win XP. Certains disent que c'est causé par iostream bibliothèque et lien statique de libstdc++.dll.

en utilisant -s option compilateur aidé un peu (réduction de 50% de la taille), mais je ne serais satisfait que par <10KB exécutable. Y a-t-il un moyen d'y parvenir en utilisant MinGW compiler? La portabilité n'est pas une grande préoccupation pour moi.

Est il est possible de copier libstdc++.dll avec l'exécutable utilisant le lien dynamique? Si oui, comment faire?


Résolu: J'utilisais MinGW 3.4. Maintenant j'ai mis à jour à la dernière MinGW 4.6 et la taille a été réduite de 90% à 50kB, 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++ Hello World programme à l'aide de iostream

MinGW | no options | -s option
------------------------------
3.4   | 500kB      | 286 kB
4.6   | 50kB       |   9 kB
16
demandé sur Jan Turoň 2011-11-02 01:40:38

4 réponses

drapeaux à utiliser:

  • -s comme vous l'avez fait pour enlever des symboles
  • -lstdc++_s pour spécifier dynamiquement un lien avec libstdc++.dll
  • -Os pour optimiser la taille du binaire.

par défaut mingw liens statiques vers libstdc++.a sur Windows.

notez que le lstdc++_s drapeau est seulement dans MinGW GCC > 4.4, je crois.

12
répondu wkl 2011-11-01 21:48:44

Donner strip et UPX un essai.

5
répondu genpfault 2011-11-01 21:45:57

utiliser le drapeau-Os peut aider. Qui optimise la taille.

2
répondu offtehcuff 2011-11-01 21:47:17

vous devriez utiliser-O pour l'optimisation. Ajoutez" - O{level} " à votre compilateur args et il optimisera pour la vitesse ou la taille. Vérifiez la documentation de votre compilateur.

vous pouvez également activer les symboles de débogage. Les enlever les rendra aussi plus petit.

0
répondu Jamie Carl 2011-11-01 21:45:54