Il programma Qt 5.0 viene eseguito in QtCreator ma non all’esterno

Ecco il contesto:

  • Ho sviluppato un programma con Qt sotto Windows 7 x64.
  • Ho aggiornato a Qt 5.0.1, QtCreator 2.6.1, compilatore VS2010.

Ora lo stato:

  • Il mio programma funziona perfettamente con QtCreator ma, quando l’ho provato all’esterno, ho ricevuto diversi errori.
  • Ho controllato questo argomento che mi ha dato alcune risposte: qtcreator – exe funziona bene all’interno di qtcreator ma non all’esterno
  • Ho quindi aggiunto Qt dll e ha aiutato, non più messaggi di Missing Libraries .
  • Tuttavia, non funzionerebbe al di fuori di QtCreator (non c’è più alcun messaggio di errore, io semplicemente non gira ), quindi ho aggiunto la directory di piattaforms con le librerie qminimal e qwindows , non ha aiutato.
  • Ho anche scaricato e aggiunto libEGL.dll come suggerito, senza risultati.

Sono bloccato e potrei davvero un piccolo aiuto.

Questo è un problema di dipendenza dal fatto che il tuo programma non può caricare le sue dipendenze, copiare i file delle dipendenze (file DLL) nella directory delle applicazioni è un modo temporaneo, questo è un modo molto rischioso che l’applicazione possa affrontare problemi nel computer di destinazione, se la macchina target non avere la versione corretta di Microsoft Runtime Library installata su di essi, l’applicazione non può essere eseguita correttamente, è ansible trovare quali dipendenze (file DLL) l’applicazione ha bisogno di loro con Dependency Walker .

Ci sono due modi per risolvere questo:

Il primo è utilizzare i componenti di Microsoft Visual C ++ 2010 Runtime nel tuo installshield (o un’altra versione dipende da quale versione della libreria Runtime hai compilato con esso), quell’utente potrebbe installarlo in silenzio, o installare con il suo binario eseguibile senza usare installshield, e in seguito copia i file DLL nella directory dell’applicazione e distribuiscili.

Il secondo è utilizzare il metodo di compilazione statica per evitare problemi del genere, ma per la compilazione statica dell’applicazione è necessaria una licenza commerciale se si desidera distribuirla sui computer di destinazione.

Per distribuire l’applicazione sui computer di destinazione:

1) Inserisci la libreria di runtime Microsoft Visual C ++ 2010 nella cartella dell’applicazione, quindi l’utente la installerà sul proprio computer.

2) Copia le dipendenze delle applicazioni richieste ( DLL files ) dalla cartella Qt's bin cartella dell’applicazione (percorso cartella bin : C:\Qt\Qt5.0.2\5.0.2\msvc2010\bin ).

3) Copiare la cartella imageformats dalla cartella Qt's plugins cartella dell’applicazione (se si utilizza un file di risorse immagine nell’applicazione).

4) Copia la cartella delle platforms dalla cartella Qt's plugins cartella dell’applicazione.

Percorso della cartella dei plug-in di Qt: C:\Qt\Qt5.0.2\5.0.2\msvc2010\plugins\

Il sito del progetto Qt è pieno di argomenti di questo tipo. Le dipendenze di tracciamento informsranno solo delle dipendenze del tempo di compilazione. Ci sono anche DLL che vengono caricate dynamicmente non si ottiene alcun errore, avviso o qualsiasi altra cosa. Se si utilizza un supporto di generazione delle DLL (escluso Qt5 * .dll) è necessario:

  • D3DCompiler_46.dll (a volte D3DCompiler_43.dll)
  • libEGL.dll
  • libGLESv2.dll
  • icudt49.dll
  • icuin49.dll
  • icuuc49.dll
  • piattaforms \ qwindows.dll (o qualunque sia il tuo sistema operativo)

Più dll di runtime del compilatore a seconda di quale build stai usando.

È ansible ridurre significativamente le dipendenze se si costruisce con il supporto OpenGL desktop invece di ANGLE e senza il webkit. Allora hai solo bisogno del plugin per la piattaforma e dei moduli Qt che stai utilizzando.

basta aggiungere il file qt.conf alla directory dell’app con il seguente contenuto

[Paths]

Biblioteche =. / Piattaforms

quindi copia, nella stessa directory app, la sottodirectory “piattaforms” che puoi trovare in: C: \ Qt \ Qt5.1.1 \ Tools \ QtCreator \ bin

È tutto.

Funziona perché qtcore.dll è compilato con i percorsi interni della tua installazione qt. (Non so perché!). Poiché t.conf viene sempre letto da qtcore all’avvio dell’app, i librarys in “piattaforms” saranno inclusi e l’app funzionerà per qualsiasi host.

Attenzione: la sottodirectory qtcore e platform deve provenire dalla stessa installazione qt.