2009-05-22 12 views
12

J'apprends à développer des applications en utilisant Qt Creator. J'ai construit une application simple sous Windows, dépend des utilisations mingwm10.dll, QtCore4.dll, QtGui4.dll, QtNetwork4.dll. Sur QtQui4.dll, j'utilise seulement quelques widgets, et je n'ai pas besoin de tout le reste ... Est-il possible de réduire la taille de QtGui4.dll ou de faire autre chose pour diminuer la taille de déploiement de l'application? Que diriez-vous de la liaison statique? Va-t-il intégrer toute la DLL, ou seulement certaines de ses parties? Et est-ce aussi possible avec Qt de lier certains dll statiquement et d'autre dynamiquement?Diminuer la taille de l'application graphique Qt

Répondre

10

Il n'est pas possible de réduire le QtGui4.dll en supprimant certaines fonctions. Trolltech est having a look at this, mais la bonne solution semble assez éloignée:

Liaison statique, je pense que c'est très problématique sur windows. Chaque fois que j'ai essayé, c'était un cauchemar. Donc, il semble que vous soyez coincé avec la DLL régulière. La seule chose que vous pouvez faire (ce que je fais pour mes applications Qt est):

  • utilisation UPX pour compresser votre DLL

ou

  • Utiliser la compression forte dans votre installateur

Si vous avez déjà UPX votre dll, vous ne pouvez pas le réduire davantage avec la compression du programme d'installation, mais cela peut réduire d'autres fichiers.

+1

Oui, "UPX -9 QtGui4.dll" est le chemin à parcourir :) –

+0

Astuce intéressante, je n'ai jamais utilisé UPX auparavant. – PowerApp101

+0

Merci! Quelle est la plus petite empreinte de l'application GUI Qt que vous pouvez archiver de cette façon? – Dmitri

5

La meilleure façon est de configurer manuellement la bibliothèque Qt avec configure. En émettant

configure --help 

, vous verrez un certain nombre d'options qui pourraient aider à réduire à la fois l'empreinte du disque et de la mémoire. Par exemple.

--no-stl 
--no-exceptions 

peut à la fois réduire l'empreinte de votre application. Vous pouvez également modifier le mkspec pour utiliser des indicateurs d'optimisation plus agressifs pour votre compilateur.

1

Si vous liez statiquement vous vous retrouvez avec un exe de 1,5 Go et vous sacrifiez certaines fonctionnalités comme les plug-ins. Donc, ça ne vaut vraiment pas la peine, sauf si vous ne voulez pas distribuer les DLL. Mais oui, vous pouvez essayer la suggestion de Henrik et exclure aussi Webkit qui est probablement le plus gros morceau de code.

+0

Dans le contexte de la question initiale, exclure WebKit ne fait aucune différence car il ne l'utilisait pas (seulement les modules Core, Gui, Network). –

Questions connexes