2010-09-09 9 views
6

Sono nuovo a Qt ma nessun problema nel C++. Ho usato Qt Creator e ho creato un programma semplice con un pulsante (come un mondo Hello), quindi ho creato il progetto. Non ero in grado di eseguire il file eseguibile in Windows stesso (al di fuori del creatore), perché aveva bisogno di questi file DLL:170 MB Hello World -> Distribuzione di app con Qt

libgcc_s_dw2-1.dll 
mingwm10.dll 
QtGuid4.dll 
QtCored4.dll 

ho trovato questi file e metterli accanto al exe. Ora il programma funziona ma la cartella ha una dimensione di 170 MB a causa dei file grandi Dll. È un modo di distribuire applicazioni Qt. So che il loro è un modo per creare un'app standalone statica, ma non è questo il problema. Sto bene con le DLL ma le dipendenze sembrano troppo grandi. Esiste un metodo diverso per la distribuzione di progetti con dimensioni di file inferiori?

Grazie

+3

Hai provato le versioni di rilascio di DLL QT? –

+0

Sì, ma dice: "Impossibile trovare il punto di ingresso della procedura _Z5qFreePv nella libreria di collegamento dinamico QtCore4.dll". Ho quindi trovato un altro QtCore4.dll in questa cartella:/qt/bin e l'ho usato, ma poi ha detto: "Il punto di ingresso della procedura ?? 1QSettings @@ UAE @ XZ non può essere posizionato nella libreria di collegamento dinamico QtCore4.dll". – Auxiliary

+4

Penso che sia necessario compilare l'applicazione in modalità di rilascio per poter utilizzare la versione di rilascio di Qt dlls. – tibur

risposta

17

Perché non si crea un rilascio e si utilizzano le DLL di rilascio anziché le DLL di debug che sono molto più grandi.

Dal momento che questo è per quanto riguarda dimensioni:

librerie di debug

QtCored4.dll = ~ 37MB

QtGui4d.dll = ~ 157MB

librerie Stampa

QtCore.dll = ~ 2.3Mb

QtGui4.dll = ~ 9 MB

(dal guardare le dimensioni della mia directory Qt \ versione \ bin)

+0

Non ho notato che questo è menzionato nei commenti al post originale prima di aver postato questo. Ma è una risposta valida alla domanda quindi credo che dovrebbe andare qui ... – radix07

3

avete due problemi qui:

  • "procedura di punto di ingresso non trovato": si dispone di più versioni di librerie Qt installate. Non bene. Stai collegando la libreria di importazione A, mentre in fase di esecuzione il tuo eseguibile trova una dll B, che non è quella a cui ti colleghi. Controllare l'output del progetto durante il collegamento per vedere quale libreria di importazione VS utilizza. La soluzione più semplice: cancella/disinstalla tutto ciò che riguarda Qt e ricomincia da capo. Regola anche le impostazioni del tuo progetto.
  • non trovare le DLL in fase di esecuzione: la soluzione è quella di aggiungere la directory con DLL QT al PATH
+0

Questo non aiuta il problema di distribuzione anche se le DLL stesse sono 170 MB. –

+0

Lo so; altre persone hanno già sottolineato che era a causa della compilazione del debug, quindi non ho ripetuto questa informazione .. – stijn

+0

"hai più versioni di librerie Qt installate" - Puoi dare una soluzione al riguardo. Sto usando QtSDK e io ho 4.8 4.7 entrambi – Dewsworld

1

Se si prevede di distribuire la versione collegata in modo statico di un'applicazione Qt, si dovrebbe prendere in considerazione la costruzione di versioni personalizzate delle librerie dove non hai bisogno di disable all the features, riducendo al minimo la dimensione delle librerie.

+5

Il collegamento statico richiede una licenza QW commerciale corretta FWIW. – Rob

+1

@Rob: Qt è disponibile sotto la licenza LGPL, non è necessaria una licenza commerciale per collegarsi staticamente con essa finché l'applicazione è LGPL. Tuttavia ci sono molti altri problemi come indicato qui: http://doc.qt.nokia.com/4.6/deployment.html –