2009-05-22 11 views
12

Sto imparando a sviluppare app utilizzando Qt Creator. Ho creato una semplice app sotto Windows, dipende dagli usi mingwm10.dll, QtCore4.dll, QtGui4.dll, QtNetwork4.dll. Fuori da QtQui4.dll Uso solo un paio di widget e non ho bisogno di tutto il resto ... È possibile ridurre le dimensioni di QtGui4.dll o fare qualcos'altro per ridurre le dimensioni dell'applicazione? E il collegamento statico? Incorporerà l'intera DLL o solo alcune parti che vengono utilizzate? E inoltre è possibile con Qt collegare alcune DLL staticamente e alcune dinamicamente?Diminuisci dimensione applicazione Qt interfaccia utente

risposta

10

Non è possibile ridurre QtGui4.dll rimuovendo alcune funzioni. Trolltech è having a look at this, ma la buona soluzione sembra abbastanza distante:

Collegamento statico, penso che sia molto problematico su Windows. Ogni volta che ci provavo, era un incubo.

Quindi, sembra che tu sia bloccato con la normale DLL. L'unica cosa che si può fare (cosa che faccio per le mie applicazioni Qt è):

  • uso UPX per comprimere la DLL

o

  • uso forte compressione nel vostro installatore

Se già UPX la tua DLL, non è possibile ridurlo ulteriormente con la compressione del programma di installazione, ma questo può ridurre altri file.

+1

Sì, "UPX -9 QtGui4.dll" è la strada da percorrere :) –

+0

Suggerimento interessante, non ho mai usato UPX prima. – PowerApp101

+0

Grazie! Qual è l'impronta più piccola dell'app GUI Qt che potresti archiviare in questo modo? – Dmitri

5

Il modo migliore è configurare manualmente la libreria Qt con configure. Con l'emissione di

configure --help 

vedrete una serie di opzioni che potrebbero aiutare a ridurre sia il disco che l'ingombro di memoria. Per esempio.

--no-stl 
--no-exceptions 

possono entrambi ridurre l'ingombro della vostra applicazione. È inoltre possibile modificare il mkspec per utilizzare i flag di ottimizzazione più aggressivi per il compilatore.

1

Se si collega staticamente si finisce con un exe da 1,5 GB e si sacrificano alcune funzionalità come i plug-in. Quindi non ne vale la pena a meno che tu non voglia distribuire le DLL. Ma sì, potresti provare il suggerimento di Henrik ed escludere anche Webkit che è probabilmente il più grande pezzo di codice.

+0

Nel contesto della domanda originale, escludendo WebKit non fa alcuna differenza come lui non l'ho usato (solo moduli Core, Gui, Network). –