Une fois que vous avez compilé votre application en mode statique, vous obtenez normalement un unique *.exe (si votre application ne nécessite aucune autre DLL indépendante de Qt).
Cet exécutable doit certainement avoir une taille d'environ 10 Mo.
En utilisant UPX, un logiciel de compression pour exécutable, il est possible de diminuer la taille de l'exécutable à environ 3 Mo.
Pour votre culture, voici le fonctionnement de UPX qui est également similaire à tout autre logiciel de compression pour exécutable.
Source : http://www.linux-pour-lesnuls.com.
Le principe général d'un logiciel tel que UPX est de rechercher les redondances (code répété plusieurs fois) de codes hexadécimaux dans le fichier à compresser, et de les remplacer par un code plus « concis » quand l'opération est possible.
Lors de la compression d'un programme avec UPX, celui-ci va intégrer une partie de code appelé le
loader et modifier l'
Original Entry Point (
offset où démarre le code du logiciel) vers ce
loader pour que ce soit lui qui se charge en premier lors du lancement du programme. Le
loader dispose de la routine de « décryptage » pour décompresser le code du logiciel ; une fois la routine terminée, le logiciel sera complètement décompressé dans la RAM (mémoire vive) et le logiciel fonctionnera comme auparavant, comme si la compression avec UPX n'avait jamais eu lieu. Vous constaterez donc le désavantage principal de la compression : c'est le temps d'exécution du logiciel (augmenté par la routine de décryptage) au détriment de la taille du .exe (diminuée par la compression).
Rassurez-vous, il est presque impossible de voir la différence du temps d'exécution avec un fichiers de 10 Mo. Effectivement, si vous compressez un exécutable de 200 Mo, ce temps ne sera plus négligeable. De plus, le temps d'exécution intervient uniquement au démarrage du logiciel ; une fois lancé, il n'y aucune différence entre un exécutable compressé ou non.
Avant de compresser votre exécutable avec UPX, la taille de celui-ci peut être diminuée de quelques kilooctets grâce à la fonction "strip" contenu dans le compilateur mingw32.
Cette fonction a pour effet de supprimer tous les symboles et sections inutiles de l'exécutable.
Voici comment l'utiliser :
1. démarrer "Qt Command Prompt" et rendez vous dans le dossier où se trouve votre exécutable;
2. tapez «
strip -s votrefichier.exe »;
3. patientez quelques instants que l'opération soit effectuée, les modifications sont directement apportées sur l'exécutable d'origine.
Attention, le nom de votre exécutable (votrefichier.exe) ne doit pas comporter d'espaces.
L'option "-s" de la fonction "strip" signifie "strip all", c'est à dire qu'elle agira sur tous les symboles inutiles.
Ensuite voici les étapes à suivre pour compresser votre exécutable avec UPX :
1. téléchargez UPX ici :
http://upx.sourceforge.net/download/upx304w.zip puis dézippez-le ;
2. copiez l'exécutable non compressé dans le dossier d'UPX ;
3. lancez une fenêtre de commandes DOS (Démarrer -> Exécuter -> cmd) ;
4. tapez «
cd chemindudossierUPX » puis validez.
Par exemple :
Code : Console
5. Puis tapez la commande suivante :
Code : Console | C:\upx>upx --best votrefichier.exe |
Attention, le nom de votre exécutable (votrefichier.exe) ne doit pas comporter d'espaces.
L'ajout de l'option "--best" permet de compresser l'exécutable avec un résultat optimal.
La compression débute alors.
Code : Console | C:\upx>upx votrefichier.exe
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2009
UPX 3.04w Markus Oberhumer, Laszlo Molnar & John Reiser Sep 27th 2009
File size Ratio Format Name
-------------------- ------ ----------- -----------
Compressing votrefichier.exe [win32/pe, NRV2E/7]
[*************************************...........................] 33.1% | |
Une fois la compression finie, vous pouvez fermer la fenêtre cmd. Votre exécutable est désormais compressé et directement utilisable sans DLL et avec une taille réduite.