Diese Antwort gilt für die Verwendung von MSYS2 mit mingw -w64 als Compiler unter Windows und qmake. Die QT-Version ist 5.15.0.
Durch die Installation des Pakets erhalten qt5-static
Sie einen QT-Build, der ausführbare Dateien erzeugt, die nicht auf QT-DLLs angewiesen sind. (Beispiel Befehlszeile -pacman -Ss mingw64/mingw-w64-x86_64-qt5-static
).
Hier wird jedoch ein neues Problem eingeführt: Es besteht das nicht -static
Flag nicht an gcc. Dies bedeutet, dass die ausführbare Datei zwar nicht von QT-DLLs abhängt, jedoch von libgcc-s, libwinpthread.dll usw.
Normalerweise wird dieses Problem behoben, indem CONFIG += static
qmake übergeben wird-static
an gcc übergeben wird. Wie in den anderen Antworten angegeben, wird diese Konfigurationsoption bei einem qt-statischen Build jedoch ignoriert!
Um dies zu lösen, musste ich die gcc-Flags für die statische Verknüpfung in der qmake-Datei manuell angeben, dh:
QMAKE_CXXFLAGS += -static
QMAKE_LFLAGS_WINDOWS += -static
Dies führt zu einer (großen) Binärdatei ohne externe Abhängigkeiten außer Windows-System-DLLs.
(Falls es darauf ankommt: Mein Anwendungsfall war das Erstellen einer COM-In-Process-Server-DLL, die keine externen Abhängigkeiten aufweisen sollte. Ich habe auch TEMPLATE=lib
und verwendet. CONFIG += dll
)
CONFIG += static
würde das Hinzufügen dies lösen. Wenn Sie keine statische Kopie von Qt haben, greifen Sie zur Quelle und erstellen Sie sie. Es dauert mehrere Stunden, um statische Bibliotheken zu erhalten.