2013-04-24 24 views
11

Ho sviluppato una semplice applicazione con Qt 5.0.2 su Windows 7 Ultimate. Come compilatore, QtCreator utilizzava MSVC2012_64bit. E non posso spostare la mia applicazione su un altro computer. Non funziona. L'applicazione Qt richiede DLL che non riesco a trovare. L'esploratore delle dipendenze pensa che i seguenti .dll s non vengano trovati. Dove posso trovarli? Perché questo problema è così diffuso? Tutte le persone si lamentano di non poter ottenere il loro .exe, che è stato sviluppato con Qt, funziona su un altro computer. enter image description hereCome eseguire applicazioni Qt 5 su altri computer (Windows 7)

Edit1: BTW quando ho aggiunto DCOMP.dll scaricato da internet, le DLL che non si trovano diventano 2-3 volte di più di quanto lo sia adesso :)

EDIT2: Si noti inoltre che su altri computer (Windows 7 Home Premium) quando faccio doppio clic sul file exe, mostra che viene caricato e nessun effetto, nessun errore.

+0

Quindi funziona sul tuo computer? Perché non usi Process Explorer per ottenere un elenco di tutte le DLL che vengono caricate durante il runtime? – sashoalm

+0

Sì, certo! Ma non posso avviare l'exe su altri computer. E non riesco a trovare queste DLL da nessuna parte nel mio computer. Così strano. – Narek

+0

Perché non usi Process Explorer per ottenere un elenco di tutte le DLL che vengono caricate durante il runtime? Ad esempio, quando avvii il tuo programma ** sul tuo computer **, dove funziona, presumibilmente. Voglio dire, installa Process Explorer sul tuo computer e fallo. Inoltre, MSVC non ha stampato tutte le librerie caricate, come quei messaggi ''rundll32.exe': Caricato 'C: \ Windows \ System32 \ dwmapi.dll', Impossibile trovare o aprire il file PDB' – sashoalm

risposta

10

Questo l'elenco delle DLL di cui avevo bisogno e anche io ho copiato la cartella C:\Qt\Qt5.0.2\5.0.2\mingw47_32\plugins\platforms:

enter image description here

Solo questo e ha funzionato per me. BTW Uso Windows 7 Ultimate 64x e Qt 5.0.2 per Windows 32 bit (MinGW 4.7, 650 MB) per Qt.

EDIT: Potrebbe anche essere necessario DLL di QtCreator da copiare ed inoltre potrebbe essere necessario avere un file chiamato qt.conf con il seguente contenuto (copiato da @Renato risposta):

[Paths] 

Libraries=./platforms 
7

Basta aggiungere il file qt.conf per la vostra applicazione dir con il seguente contenuto

[Paths] 

Libraries=./platforms 

quindi copiare, alla stessa dir app, le subdir "piattaforme" che troverete nella directory C: \ Qt \ Qt5.1.1 \ Tools \ QtCreator \ bin

Questo è tutto.

Questo risolve perché qtcore.dll è compilato con percorsi interni del tuo qt instalation. (Non lo so!). Dal momento che qt.conf viene sempre letto da qtcore quando l'app avvia i librarys in "piattaforme" sarà incluso e l'app funziona su qualsiasi host.

Attenzione: la dir sub qtcore e le piattaforme devono diventare dalla stessa instalazione qt.

Siamo spiacenti, ma la soluzione funziona correttamente.

+0

mi hai salvato la notte, grazie. per favore, accetta un orso, un giorno. – Erowlin

0

Grazie per il vostro aiuto!

Per me, aggiungere semplicemente qwindows.dll alla directory /platforms in qualche modo non è stato tagliato.
Finalmente ho tutto per lavorare copiando senza mezzi termini l'intero plugin directory nella binario di mia applicazione e la creazione di un file qt.conf con il seguente contenuto:

[Paths] 
Plugins=./plugins 
2

Qt in questi giorni (come di almeno Qt 5.2, se non prima) viene spedito con "windeployqt.exe ", che quando si punta al tuo programma compilato (e, se come me li stai usando, come argomento aggiuntivo di" --qmldir path/to/QML/files "per un programma Qt Quick) dovresti sputare tutto richiesto DLL nella stessa directory del programma compilato attualmente risiede Quindi per me su una macchina di costruzione locale, per esempio, mi sono imbattuto qualcosa sulla falsariga di:.

windeployqt --qmldir C:\Code\AppSource C:\Code\build-msvc2010\release 

Questo è con la directory Qt \ bin nella mia $ PERCORSO (o, suppongo in gergo di Windows,% PATH%;)) usando Qt 5.5, anche se ho fatto lo stesso back con 5.2 e 5.3 pure

IIRC se si utilizza MSVC come compilatore, avevo ancora bisogno di copiare quelle DLL (nel mio caso, msvc2010, quindi msvcp100.dll e msvcr100.dll) manualmente, bu Potrei ricordare sbagliato.

+0

windeployqt dovrebbe creare un vcredist_x86.exe nella cartella di output che può essere eseguito sul sistema di destinazione. Questo è il modo preferito per gestire i file msvc100.dll mancanti e tali (come in esso è disapprovato per copiare quelli manualmente) ---- Inoltre, se si desidera un insieme di codice più pulito per passare a Il nuovo sistema è possibile spostare il file yourapp.exe in una nuova cartella da solo ed eseguire windeployqt su di esso che dovrebbe portare solo i file effettivamente necessari su un altro computer – jp36

+1

Utilizzo di MVC++ 2015, 'windeployqt' non rende vcredist_x86.exe o file vcredist_x64.exe! – SuB

Problemi correlati