Qt 5.1.1: Die Anwendung konnte nicht gestartet werden, da das Plattform-Plugin "Windows" fehlt

124

Bearbeiten: Einige Leute haben angefangen, meine Frage als Duplikat zu markieren. Vergessen Sie nicht, dass es viele ähnliche Fragen gab, als ich diese stellte (siehe z. B. die Liste unten). Doch keine dieser Antworten mein Problem gelöst . Nach langer Suche fand ich einen Kommentar, der von allen Benutzern ignoriert wurde und auf die fehlende Bibliothek hinwies. Jetzt, viele Monate später, wurde der Kommentar in eine Antwort geändert. Als ich diese Frage jedoch selbst beantwortete, wollte ich anderen Menschen helfen, indem ich die Lösung direkt bereitstellte. Dies sollte nicht vergessen werden und bisher hat meine Antwort vielen Menschen geholfen. Daher ist meine Frage definitiv kein Duplikat. Übrigens: Die akzeptierte Antwort innerhalb des oben angegebenen Links löst das Problem nicht !


Ja, ich habe die Suche verwendet:

Fehler beim Laden des Plattform-Plugins "Windows". Verfügbare Plattformen sind: Fehler

Bereitstellen der Qt C ++ - Anwendung aus Visual Studio qwindows.dll-Fehler

Plattform-Plugin "Windows" konnte nicht geladen werden Verfügbare Plattformen sind: Windows, minimal

In meinem Fall besteht das Problem jedoch weiterhin. Ich verwende Qt 5.1.1 mit Visual Studio 2012 und habe meine Anwendung unter Windows 7 mit Qt Creator 2.8.1 entwickelt. Die Anwendung wird im "Release" -Modus kompiliert und kann ausgeführt werden, wenn sie direkt mit Qt Creator gestartet wird.

Wenn ich jedoch vom "release" -Folder ausgehe, erhalte ich die folgende Meldung:

Diese Anwendung konnte nicht gestartet werden, da das Qt-Plattform-Plugin "windows" nicht gefunden oder geladen werden konnte. Verfügbare Plattform-Plugins sind: Minimal, Offscreen, Windows.

Die Ordnerstruktur sieht folgendermaßen aus:

release
+ gui.exe
+ icudt51.dll
+ icuin51.dll
+ icuuc51.dll
+ libGLESv2.dll
+ Qt5Core.dll
+ Qt5Gui.dll
+ Qt5Widgets.dll
+ platforms

Plattformen ist der Ordner, der direkt aus Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012 \ plugins \ platform kopiert wurde, einschließlich z. B. qwindows.dll. Es spielt keine Rolle, ob ich es wie einige andere Benutzer in "Plattform" umbenenne. Qt findet immer noch nicht die "Plattform-Plugin-Fenster", wo ist mein Fehler?

Anonym
quelle
5
Ich hatte ein ähnliches Problem. Windows 8.1 Qt 5.3.1 MinGW 32, dynamische Verknüpfung. Gelöst durch Kopieren der DLL aus dem Qt-Ordner in die Datei ../MyApp/platforms/qwindows.dll. Hinweis: Es gibt kein "Plugins" -Dir im Pfad
Dmitriy
Für ähnliche Probleme verwenden Sie bitte das Tool Depends, das Ihnen DLL-Abhängigkeiten und daraus resultierende Probleme anzeigt. Sie können dieses Tool zur statischen Analyse einer exe- oder dll-Datei verwenden, aber auch, um den Start einer Anwendung mit dynamisch geladenen DLLs anzuzeigen.
Flovdis
Verwenden Sie windeployQt
CrippledTable

Antworten:

64

Okay, wie hier gepostet https://stackoverflow.com/a/17271172/1458552 ohne viel Aufmerksamkeit von anderen Benutzern:

Die libEGL.dll fehlte! Auch wenn dies beim Versuch, die Anwendung zu starten, nicht gemeldet wurde (alle anderen * .dlls wie Qt5Gui.dll wurden gemeldet).

Anonym
quelle
2
In meinem Fall: Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012 \ bin (natürlich abhängig von Ihrer Visual Studio-Version)
Anonym
8
Woher wusstest du, dass die fehlende DLL libEGL ist?
user1493046
4
Du hast mir Stunden gespart! Hatte das gleiche Problem auf Qt 5.3.1
Tarabyte
4
@ user1493046 Ich habe es geschafft, dies mit Abhängigkeiten und seinem Profilierungsmodus (F7) zu reproduzieren . Nachdem die App gestartet und der Fehler angezeigt wurde, wurde libEGL.dll in der Abhängigkeitsliste angezeigt.
Lapis
17
Das Hinzufügen von libEGL.dll hat nicht funktioniert. Das Festlegen der folgenden Umgebungsvariablen funktionierte jedoch für mich: QT_QPA_PLATFORM_PLUGIN_PATH =% QTDIR% \ plugins \ platform \
arsalank2
36

Ich habe ein Plattformverzeichnis neben meinem exe-Speicherort erstellt und qwindows.dll darin abgelegt, aber ich habe immer noch den Fehler "Windows-Plugin konnte nicht geladen werden" erhalten. Verfügbare Plattformen sind: Windows-Fehler.

Ich hatte qwindows.dll von C: \ Qt \ Qt5.1.1 \ Tools \ QtCreator \ bin \ plugins \ platform kopiert, was nicht der richtige Speicherort ist. Ich habe mir das Debug-Protokoll angesehen, das in Qt Creator ausgeführt wurde, und festgestellt, dass meine App beim Ausführen im Debugger in C: \ Qt \ Qt5.1.1 \ 5.1.1 \ mingw48_32 \ plugins \ platform gesucht hat.

Als ich von C: \ Qt \ Qt5.1.1 \ 5.1.1 \ mingw48_32 \ plugins \ platform kopierte, funktionierte alles einwandfrei.

Brandon
quelle
38
Das Festlegen der folgenden Umgebungsvariablen hat bei mir funktioniert: QT_QPA_PLATFORM_PLUGIN_PATH =% QTDIR% \ plugins \ platform \
arsalank2
24

In der Version fehlt wahrscheinlich eine Bibliothek / ein Plugin oder die Bibliothek befindet sich im falschen Verzeichnis und / oder im falschen Verzeichnis.

Qt beabsichtigte Antwort: Verwenden Sie windeployqt . Erklärung siehe letzter Absatz

Manuelle Antwort:

Erstellen Sie einen Ordner mit dem Namen "Plattformen" im selben Verzeichnis wie Ihre Datei application.exe. Kopieren Sie die Datei qwindows.dll, die sich im / bin des Compilers befindet, mit dem Sie Ihre Anwendung freigegeben haben, und fügen Sie sie in den Ordner "platform" ein. Wie Magie funktioniert es. Wenn die DLL nicht vorhanden ist, überprüfen Sie Plugins / Plattformen / (wobei sich Plugins / im selben Verzeichnis wie bin / befinden) <- PfunnyGuys Kommentar.

Es scheint ein häufiges Problem zu sein, dass die DLL aus dem falschen Compiler-Bin stammt. Stellen Sie sicher, dass Sie die Datei qwindows.dll vom selben Compiler kopieren, mit dem Sie Ihre App veröffentlicht haben.

Qt wird mit Plattformkonsolenanwendungen geliefert, mit denen alle Abhängigkeiten (einschließlich solcher wie qwindows.dll und libEGL.dll) in den Ordner Ihrer bereitgestellten ausführbaren Datei eingefügt werden. Dies ist die beabsichtigte Methode zum Bereitstellen Ihrer Anwendung, damit Sie keine Bibliotheken verpassen (was das Hauptproblem bei all diesen Antworten ist). Die Anwendung für Windows heißt windeployqt . Es gibt wahrscheinlich eine Bereitstellungskonsolen-App für jedes Betriebssystem.

CrippledTable
quelle
1
Folgendes brauchte ich: Hinweis: qwindows.dll befindet sich nicht in bin / Ihrer Qt-Plattform-Installation, sondern in Plugins / platform /, wobei sich Plugins / im selben Verzeichnis wie bin /
PfunnyGuy befinden.
1
Danke dir! Zusammenfassend sind die Dateien: Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll und YourApp.exe im Hauptverzeichnis sowie Plattformen \ qwindows.dll und Plattformen \ libEGL.dll im Unterverzeichnis.
Pierre
1
windeployqt ist die richtige Antwort. Ich habe es benutzt und es hat alles kopiert, was neben der EXE-Datei benötigt wird. Es beseitigt das Rätselraten, welche DLL benötigt wird und welche nicht
H. Al-Amri
14

Das Setzen der QT_QPA_PLATFORM_PLUGIN_PATHUmgebungsvariablen auf% QTDIR% \ plugins \ platform \ hat bei mir funktioniert .

Es wurde auch hier und hier erwähnt .

Jim G.
quelle
3
Diese Antwort funktioniert möglicherweise auf Ihrem aktuellen Computer, hilft jedoch nicht anderen, die versuchen, ihre Programme auf anderen Computern bereitzustellen, und die speziell identifizieren müssen, welche Bibliotheken fehlen / erforderlich sind.
RTbecard
1
2017 hat das bei mir funktioniert. Ich werde keine Anwendung bereitstellen! Mit Qt Creator öffnen Sie einfach \ Neue Datei oder Projekt ... \ Qt Widgets-Anwendung, dann Ausführen und es stürzt mit derselben Meldung ab. Das Einstellen dieser Variable hilft mir.
Phiber
Kopieren Sie einfach den Plugins-Ordner irgendwo neben Ihrer improvisierten "Distribution" und zeigen Sie mit der Env-Variable darauf - sollte funktionieren (Sie müssen "QTDIR" nicht verwenden) :)
mlvljr
9

Ich bin darauf gestoßen und keine der Antworten, die ich finden konnte, hat es für mich behoben.

Mein Kollege hat Qt (5.6.0) auf seinem Computer installiert unter: C: \ Qt \ Qt5.6.0 \ 5.6 \ msvc2015 \ plugins
Ich habe Qt (5.6.2) am selben Speicherort installiert.

Ich habe aus diesem Beitrag erfahren: http://www.tripleboot.org/?p=536 , dass die Qt5Core.dll einen Speicherort für die Plugins hat, die bei der Erstinstallation von Qt darauf geschrieben wurden. Da die Verzeichnisse meines Kollegen und meines Qt identisch waren, jedoch unterschiedliche Versionen von Qt installiert wurden, wird eine andere Datei qwindows.dll benötigt. Wenn ich eine von ihm bereitgestellte Exe ausführte, verwendete sie meine Datei C: \ Qt \ Qt5.6.0 \ 5.6 \ msvc2015 \ plugins \ platform \ qwindows.dll anstelle der Datei neben der ausführbaren Datei im Unterordner. \ Plateaus.

Um dies zu umgehen, habe ich der Anwendung die folgende Codezeile hinzugefügt, die sie zu zwingen scheint, neben der Exe nach dem Unterordner "Plattformen" zu suchen, bevor der Pfad in der Qt5Core.dll angezeigt wird.

QCoreApplication::addLibraryPath(".");

Ich habe die obige Zeile vor dem QApplication-Aufruf wie folgt zur Hauptmethode hinzugefügt:

int main( int argc, char *argv[] )
{
    QCoreApplication::addLibraryPath(".");
    QApplication app( argc, argv );
    ...
    return app.exec();
}
Joel
quelle
1
Dieser hat für mich funktioniert ... aber beachten Sie, dass Sie ihn möglicherweise qwindowsd.dllim Verzeichnis "Plattformen" benötigen, wenn Sie sich in einer Situation befinden, in der Sie Debug-Builds mit Ihren Kollegen teilen ...
HostileFork sagt,
Dieser hat bei mir funktioniert, weil ich bei der Erwähnung von qwindowsd.dll wusste, dass meine App im Debug-Modus kompiliert wurde, und ich habe die Qtxxxd.dll-Bibliotheken installiert, aber qwindows.dll im Plattformordner verwendet.
Gustavo Rodríguez
6

Erstelle ein Verzeichnis platforms und kopiere qwindows.dlles platformsund app.exebefinde dich im selben Verzeichnis

cd app_dir mkdir platforms xcopy qwindows.dll platforms\qwindows.dll

Ordnerstruktur + app.exe + platforms\qwindows.dll

KunMing Xie
quelle
Es wird in der Frage erwähnt, dass "Plattformen der Ordner ist, der direkt von Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012 \ plugins \ platform einschließlich z. B. qwindows.dll kopiert wurde."
parasietje
@parasietje App sucht qwindows.dllim Verzeichnis platforms. Ich poste dies, weil ich es behoben habe. Machst du einen Test vor dem Downvote?
KunMing Xie
Ihre Antwort beantwortet nicht die ursprüngliche Frage. Ihre Antwort deutet auf etwas hin, das das Originalplakat bereits versucht hat.
Parasietje
3

Ich habe eine andere Lösung gefunden. Erstellen Sie qt.conf im App-Ordner als solchen:

[Paths]
Prefix = .

Und dann kopiere den Plugins-Ordner in den App-Ordner und es funktioniert für mich.

Peter Quiring
quelle
Ok, ich bin in einer minGW, CMake, Qt 5.12-Umgebung, in der das Windeploy-Tool nicht möglich ist. Der Plattformordner war da, hat aber nicht funktioniert. Das Ersetzen durch eines aus der Qt-lib hat auch nicht geholfen. Mit Ihrem Trick behoben (nach dem Kopieren des Ordners). Danke dir!
Marcel Petrick
2

Die meisten dieser Antworten enthalten gute (korrekte) Informationen, aber in meinem Fall fehlte noch etwas.

Meine App wird als Bibliothek (DLL) erstellt und von einer Nicht-Qt-Anwendung aufgerufen. Früher habe ich windeployqt.exedie Qt-DLLs, Plattformen, Plugins usw. im Installationsverzeichnis eingerichtet, aber die Plattform konnte immer noch nicht gefunden werden. Nach einigen Experimenten stellte ich fest, dass das Arbeitsverzeichnis der Anwendung auf einen anderen Ordner eingestellt war. Also griff ich nach dem Verzeichnis, in dem die DLL "lebte", GetModuleHandleExAund fügte dieses Verzeichnis zur Laufzeit mit dem Qt-Bibliothekspfad hinzu

QCoreApplication::addLibraryPath(<result of GetModuleHandleExA>);

Das hat bei mir funktioniert.

Jacob Robbins
quelle
2

Für mich bestand die Lösung darin, die PATHVariable zu korrigieren . Es hatte Anaconda3 \ Library \ bin als einen der ersten Pfade. Dieses Verzeichnis enthält einige , aber nicht alle Qt-Bibliotheken. Anscheinend ist das ein Problem. Das Verschieben von C: \ Programme \ Qt \ 5.12.3 \ msvc2017_64 \ bin nach vorne PATHlöste das Problem für mich.

Jann Poppinga
quelle
1

Ich hatte dieses Problem bei der Verwendung von QT 5.6, Anaconda 4.3.23, Python 3.5.2 und Pyinstaller 3.3. Ich hatte ein Python-Programm mit einer mit QTcreator entwickelten Schnittstelle erstellt, musste es aber auf anderen Computern bereitstellen, daher musste ich mit pyinstaller eine ausführbare Datei erstellen.

Ich habe festgestellt, dass das Problem auf meinem Computer behoben wurde, wenn ich die folgenden Umgebungsvariablen festgelegt habe:

QT_QPA_PLATFORM_PLUGIN_PATH:% QTDIR% \ plugins \ platform \

QTDIR: C: \ Miniconda3 \ pkgs \ qt-5.6.2-vc14_3 \ Library

Diese Lösung funktionierte jedoch nur auf meinem PC, auf dem conda und qt in diesen Ordnern installiert waren.

Um dies zu lösen und die ausführbare Datei auf jedem Computer zum Laufen zu bringen, musste ich die ".spec" (Datei, die zuerst von pyinstaller generiert wurde) so bearbeiten, dass sie die folgende Zeile enthält:

datas = [('C: \ Miniconda3 \ pkgs \ qt-5.6.2-vc14_3 \ Library \ plugins \ platform * .dll', 'platform'),]

Diese Lösung basiert auf den Antworten von Jim G. und CrippledTable

Loebsen Van de Graaff
quelle
1

Ich hatte das gleiche Problem und löste es, indem ich verschiedene Dinge anwendete. Das erste, wenn es sich um ein Programm handelt, das Sie mit Qt erstellt haben.

Im Ordner (in meinem Fall) von "C: \ Qt \ Qt5.10.0 \ 5.10.0 \ msvc2017_64 \ plugins" finden Sie andere Ordner, einer davon ist "Plattformen". Dieser "Plattformen" -Ordner wird neben Ihrer ausführbaren EXE-Datei kopiert. Wenn Sie nun den Fehler 0xc000007d erhalten, haben Sie die Version nicht kopiert, da es sich um 32 Bit oder 64 Bit handeln kann.

Wenn Sie mit den Fehlern fortfahren, fehlen Ihnen mehr Bibliotheken. Mit dem Programm "Dependency Walker" können Sie einige der fehlenden Ordner erkennen. Sicherlich wird es Ihnen anzeigen, dass Sie eine NVIDIA .dll benötigen, und es wird Ihnen den Speicherort mitteilen.

Anstatt "Dependency Walker" zu verwenden, können Sie auch die gesamte DLL aus Ihrem Ordner "C: \ Windows \ System32" neben Ihrer ausführbaren Datei kopieren. Führen Sie Ihre EXE-Datei aus. Wenn alles gut geladen ist, sodass in den DLL-Bibliotheken, die Sie nicht benötigen oder verwenden, kein Speicherplatz belegt ist, verwenden Sie das EXE-Programm mit all Ihren Optionen. Löschen Sie alle EXE-Dateien, ohne die EXE-Datei zu schließen. DLL, die Sie gerade neben der EXE-Datei kopiert haben. Wenn diese DLL also von Ihrem Programm verwendet werden, lässt das System Sie nicht löschen, sondern entfernt nur diejenigen, die nicht erforderlich sind.

Ich hoffe, diese Lösung dient Ihnen.

Denken Sie daran, dass sich die Bibliotheken bei einem 64-Bit-Betriebssystem im System32-Ordner befinden und bei einem 32-Bit-Betriebssystem auch im System32-Ordner. Dies geschieht, damit keine Kompatibilitätsprobleme mit 32-Bit-Programmen in einem 64-Bit-Computer auftreten. Der SysWOW64-Ordner enthält die 32-Bit-Dateien als Backup.

Ire
quelle
Es funktioniert, ist aber eher eine vorübergehende Lösung. Ist es möglich, etwas zu tun, damit Sie den Plattformordner nicht kopieren müssen?
Oleg Yablokov
0

Für eine MinGW-Plattform und wenn Sie ein Debug-Ziel mit einer handgemachten, ad hoc geschriebenen CMakeLists.txt kompilieren, müssen Sie die Datei qwindows.dll ebenfalls zum Plattformverzeichnis hinzufügen. Die ausführbare Datei windeployqt macht ihre Arbeit gut, aber es scheint, dass der CMake-Build aus irgendeinem seltsamen Grund auch die Release-Variante benötigt. Zusammenfassend ist es besser, sowohl die qwindows.dll als auch die qwindowsd.dll in Ihrem Plattformverzeichnis zu haben. Ich habe nicht das seltsame Ergebnis festgestellt, als ich das CMake-Projekt in QtCreator importierte und dann die Erstellungsprozedur ausführte. Beim Kompilieren in der Befehlszeile scheint das CMake-Projekt die Abhängigkeit qwindows.dll auszulösen, entweder wenn die richtige für das Debug-Ziel festgelegt ist (qwindowsd.dll).

Michal Turlik
quelle
0

Verwenden Sie diese Batchdatei: RunWithQt.bat

@echo off
set QTDIR=C:\Qt\Qt5.1.1\5.1.1\msvc2012\bin
set QT_QPA_PLATFORM_PLUGIN_PATH=%QTDIR%\plugins\platforms\
start %1
  • Um es zu verwenden, ziehen Sie Ihre Datei gui.exe und legen Sie sie im Explorer auf RunWithQt.bat ab.
  • oder rufen Sie RunWithQt gui.exeüber die Befehlszeile an
Jakub Krzesłowski
quelle
0

Wenn Sie Anaconda installiert haben, empfehle ich Ihnen, es zu deinstallieren und zu versuchen, das Python-Paket von der Quelle zu installieren. Ich habe dieses Problem auf diese Weise behoben

Soberbia-Codierung
quelle
0

Die Anwendung qtbase / bin / windeployqt.exe stellt Ihre Anwendung automatisch bereit . Wenn Sie eine Eingabeaufforderung mit korrekt eingestellten Umgebungsvariablen starten, wird sie im aktuellen Verzeichnis bereitgestellt. Sie finden ein Beispiel für ein Skript:

@echo off
set QTDIR=E:\QT\5110\vc2017

set INCLUDE=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\ATLMFC\include;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\include;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\ucrt;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\shared;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\winrt;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\cppwinrt

set LIB=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\ATLMFC\lib\x86;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\x86;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x86;C:\Program Files (x86)\Windows Kits\10\lib\10.0.14393.0\ucrt\x86;C:\Program Files (x86)\Windows Kits\10\lib\10.0.14393.0\um\x86;

set LIBPATH=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\ATLMFC\lib\x86;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\x86;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\x86\store\references;C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.17134.0;C:\ProgramFiles (x86)\Windows Kits\10\References\10.0.17134.0;C:\Windows\Microsoft.NET\Framework\v4.0.30319;

Path=%QTDIR%\qtbase\bin;%PATH%
set VCIDEInstallDir=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\
set VCINSTALLDIR=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\
set VCToolsInstallDir=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\
set VisualStudioVersion=15.0
set VS100COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\
set VS110COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\
set VS120COMNTOOLS=S:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\
set VS150COMNTOOLS=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\
set VS80COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\Tools\
set VS90COMNTOOLS=c:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\
set VSINSTALLDIR=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\
set VSSDK110Install=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VSSDK\
set VSSDK150INSTALL=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VSSDK
set WindowsLibPath=C:\Program Files (x86)\Windows Kits\10\UnionMetadata;C:\Program Files (x86)\Windows Kits\10\References
set WindowsSdkBinPath=C:\Program Files (x86)\Windows Kits\10\bin\
set WindowsSdkDir=C:\Program Files (x86)\Windows Kits\10\
set WindowsSDKLibVersion=10.0.14393.0\
set WindowsSdkVerBinPath=C:\Program Files (x86)\Windows Kits\10\bin\10.0.14393.0\
set WindowsSDKVersion=10.0.14393.0\
set WindowsSDK_ExecutablePath_x64=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\
set WindowsSDK_ExecutablePath_x86=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\

mkdir C:\VCProjects\Application\Build\VS2017_QT5_11_32-Release\setup
cd C:\VCProjects\Application\Build\VS2017_QT5_11_32-Release\setup
copy /Y ..\Release\application.exe .
windeployqt application.exe
pause
MyGeertRo
quelle
0

Nehmen wir an, Sie wollten einige tragbare CGAL-Demos haben . Sie hätten also einen Ordner "CGAL" und darin einen Unterordner namens "lib": Alle (allgemeinen) Support-DLLs für alle Programme im CGAL-Ordner finden Sie hier. In unserem Beispiel wäre dies der Dll-Download : einfach in das Verzeichnis "lib" entpacken. Je weiter Sie auf der Demoseite nach unten scrollen , desto beeindruckender ist der Inhalt. In meinem Fall schien die Polyeder-Demo ungefähr richtig zu sein. Wenn dies auf meinem 10+ Jahre alten Notebook läuft, bin ich beeindruckt. Also habe ich neben "lib" einen Ordner "demo" im "CGAL" -Verzeichnis erstellt. Erstellen Sie nun eine .cmd-Datei in diesem Ordner. Ich habe meine "Polyhedron.cmd" genannt. Wir haben also eine Verzeichnisstruktur wie diese:

 CGAL - the bag for all the goodies
  lib - all libraries for all CGAL-packages
 demo - all the demos I'm interested in
[...] - certainly some other collections, several apps per folder...
Polyhedron.cmd - and a little script for every Qt-exe to make it truly portable.

In diesem kleinen Beispiel enthält "Polyhedron.cmd" den folgenden Text:

@echo off
set "me=%~dp0"
set PATH=%me%lib
set "QT_PLUGIN_PATH=%me%lib\plugins"
start /b "CGAL Polyhedron Demo" "%me%demo\polyhedron\polyhedron_3.exe"

Bis auf die letzte Zeile können natürlich alle Skripte gleich sein. Die einzige Einschränkung ist: Das "DOS-Fenster" bleibt geöffnet, solange Sie das eigentliche Programm verwenden. Schließen Sie das Shell-Fenster, und Sie töten auch die * .exe. Wo immer Sie den "CGAL" -Ordner kopieren, da das seltsame "% ~ dp0" -Wriggle den vollständigen Pfad zu der * .cmd-Datei darstellt, die wir gestartet haben, mit nachfolgendem "\". "% Me% lib" ist also immer der vollständige Pfad zur eigentlichen Bibliothek (in meinem Fall "CGAL \ lib"). Die nächsten 2 Zeilen teilen Qt mit, wo sich die "Laufzeit" -Dateien befinden. Dies ist mindestens die Datei "qwindows.dll" für Windows-Qt-Programme plus eine beliebige Anzahl von * .dlls. Wenn ich mich recht erinnere, hatte die DLL-Bibliothek (zumindest beim Herunterladen) einen kleinen "Fehler", da sie das Verzeichnis "Plattformen" mit qwindows.dll enthält.gehe in "Plugins". Wenn eine Qt-App, eine Qt-App, "qwindows.dll" nicht findet, kann sie "windows" nicht finden. Und es erwartet es in einem Verzeichnis mit dem Namen "Plattformen" im Verzeichnis "Plugins", dem es vom Betriebssystem mitgeteilt werden muss, auf dem es ausgeführt wird ... und wenn "QT_PLUGIN_PATH" nicht genau auf alle Helfer-DLLs verweist, die Sie verwenden brauchen, einige Qt-Programme werden immer noch ohne Probleme laufen. Und einige beschweren sich über fehlende * .dlls, von denen Sie noch nie gehört haben ...

Thomas Sturm
quelle
0

Für alle, die aus QT Version 5.14.0 kommen, habe ich 2 Tage gebraucht, um diese Fehlererklärung zu finden:

windeployqt funktioniert nicht für MinGW QTBUG-80763 Wird in 5.14.1 behoben

https://wiki.qt.io/Qt_5.14.0_Known_Issues

Also sei dir bewusst. Die Verwendung von windeployqt mit MinGW führt zu demselben Fehler wie hier angegeben.

Yahya Tawil
quelle