Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.
How to build a static Qt version for Windows with gcc/de: Difference between revisions
AutoSpider (talk | contribs) (Convert ExpressionEngine links) |
mNo edit summary |
||
(7 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{Cleanup | reason=Auto-imported from ExpressionEngine.}} | {{Cleanup | reason=Auto-imported from ExpressionEngine.}} | ||
{{LangSwitch}} | |||
[[Category:Developing with Qt::General]] | [[Category:Developing with Qt::General]] | ||
[[Category:HowTo]] | [[Category:HowTo]] | ||
[[Category:Tools::QtCreator]] | [[Category:Tools::QtCreator]] | ||
= Wie baue ich Qt als statische Library für Windows mit gcc = | = Wie baue ich Qt als statische Library für Windows mit gcc = | ||
Diese | Diese Anleitung beschreibt den Weg, den ich gegangen bin und der bei mir funktioniert. Ich hoffe, es hilft euch ein wenig. | ||
== Vorbereitung == | == Vorbereitung == | ||
Als erstes lädt man das Qt SDK herunter, das man nehmen will und installiert es (ich benutze 4.7.0 incl. MinGW). Dann kopiert man den kompletten Dateibau des Verzeichnisses qt (Qt-SDK-Pfad\qt) in ein neues Verzeichnis (Qt-SDK-Pfad\qt-static). | |||
Die Datei Qt-SDK-Pfad\bin\qtenv.bat wird in den neuen Ordner kopiert (Qt-SDK-Pfad\qt-static) und dort bearbeitet: | Die Datei Qt-SDK-Pfad\bin\qtenv.bat wird in den neuen Ordner kopiert (Qt-SDK-Pfad\qt-static) und dort bearbeitet: | ||
—> ersetze Qt-SDK-Pfad\qt mit Qt-SDK-Pfad\qt_static | —> ersetze Qt-SDK-Pfad\qt mit Qt-SDK-Pfad\qt_static | ||
Line 38: | Line 37: | ||
'''''' '''CONFIG ''= staticlib* ganz oben einfügen. | '''''' '''CONFIG ''= staticlib* ganz oben einfügen. | ||
== Erstellen der statischen Qt Version == | |||
# Öffne eine Komandozeile und gehe zu folgendem Pfad: Qt-SDK-Pfad\qt_static | # Öffne eine Komandozeile und gehe zu folgendem Pfad: Qt-SDK-Pfad\qt_static | ||
# führe qtenv.bat aus. | # führe qtenv.bat aus. | ||
Line 61: | Line 59: | ||
= Wie integriere ich die statische Qt version in den QtCreator = | = Wie integriere ich die statische Qt version in den QtCreator = | ||
Öffne QtCreator un gehe zum Menü Extras / Optionen. Wähle den | Öffne QtCreator un gehe zum Menü Extras / Optionen. Wähle den Reiter Qt4: | ||
[[Image:http://lh6.ggpht.com/_m1PNLlZctqY/TPkPz5RZzzI/AAAAAAAAABI/MnKODV6mfNs/s640/Options.jpg|Select Options - Qt4 - Add]] | [[Image:http://lh6.ggpht.com/_m1PNLlZctqY/TPkPz5RZzzI/AAAAAAAAABI/MnKODV6mfNs/s640/Options.jpg|Select Options - Qt4 - Add]] | ||
Durch Drücken des Plus Knopfes eine neue Qt | Durch Drücken des Plus Knopfes eine neue Qt-Version hinzufügen | ||
Namen und Pfad zu qmake eingeben (Qt-SDK-Pfad\qt_static\bin\qmake.exe) | Namen und Pfad zu qmake eingeben (Qt-SDK-Pfad\qt_static\bin\qmake.exe) | ||
MinGW Verzeichnis eingeben (von 4.7.0 kopieren) | MinGW Verzeichnis eingeben (von 4.7.0 kopieren) | ||
[[Image:http://lh4.ggpht.com/_m1PNLlZctqY/TPkP0ABWgJI/AAAAAAAAABM/coniya1Bqs8/s640/Options2.jpg|Changes in the settings]] | [[Image:http://lh4.ggpht.com/_m1PNLlZctqY/TPkP0ABWgJI/AAAAAAAAABM/coniya1Bqs8/s640/Options2.jpg|Changes in the settings]] | ||
Wenn man ein neues Projekt erzeugt, die Frage nach der Qt Version mit allen Versionen (4.7.0 / 4.7.0 static) beantworten. | Wenn man ein neues Projekt erzeugt, die Frage nach der Qt-Version mit allen Versionen (4.7.0 / 4.7.0 static) beantworten. | ||
[[Image:http://lh4.ggpht.com/_m1PNLlZctqY/TPkPz6SLwzI/AAAAAAAAABE/HlpDXpa4UgU/s640/NewProject.jpg|Neues Projekt anlegen]] | [[Image:http://lh4.ggpht.com/_m1PNLlZctqY/TPkPz6SLwzI/AAAAAAAAABE/HlpDXpa4UgU/s640/NewProject.jpg|Neues Projekt anlegen]] | ||
Wenn bereits ein Projekt existiert, dieses öffnen und dann die Option Projekt auswählen (linke Schnellwahl im QtCreator) und eine | Wenn bereits ein Projekt existiert, dieses öffnen und dann die Option Projekt auswählen (linke Schnellwahl im QtCreator) und eine Einstellung hinzufügen. | ||
[[Image:http://lh4.ggpht.com/_m1PNLlZctqY/TPkP0aU1cLI/AAAAAAAAABQ/vJwJ8FsuToA/s640/Projects_details.jpg|Projekteinstellungen ändern]] | [[Image:http://lh4.ggpht.com/_m1PNLlZctqY/TPkP0aU1cLI/AAAAAAAAABQ/vJwJ8FsuToA/s640/Projects_details.jpg|Projekteinstellungen ändern]] | ||
Um das Projekt als statisch und dynamisch gelinkt zu erstellen, sollte bei den statischen Projekteinstellkungen folgendes hinzugefügt werden: CONFIG+=static | Um das Projekt als statisch und dynamisch gelinkt zu erstellen, sollte bei den statischen Projekteinstellkungen folgendes hinzugefügt werden: CONFIG+=static | ||
Line 90: | Line 88: | ||
Wenn für die debug Version ein d am Ende des binary Dateinamen seien soll, wird noch folgendes benötigt: | Wenn für die debug Version ein d am Ende des binary Dateinamen seien soll, wird noch folgendes benötigt: | ||
<code> | <code> | ||
# change the nama of the binary, if it is build in debug mode | # change the nama of the binary, if it is build in debug mode |
Latest revision as of 09:42, 17 May 2017
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine. Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean. |
Wie baue ich Qt als statische Library für Windows mit gcc
Diese Anleitung beschreibt den Weg, den ich gegangen bin und der bei mir funktioniert. Ich hoffe, es hilft euch ein wenig.
Vorbereitung
Als erstes lädt man das Qt SDK herunter, das man nehmen will und installiert es (ich benutze 4.7.0 incl. MinGW). Dann kopiert man den kompletten Dateibau des Verzeichnisses qt (Qt-SDK-Pfad\qt) in ein neues Verzeichnis (Qt-SDK-Pfad\qt-static). Die Datei Qt-SDK-Pfad\bin\qtenv.bat wird in den neuen Ordner kopiert (Qt-SDK-Pfad\qt-static) und dort bearbeitet:
—> ersetze Qt-SDK-Pfad\qt mit Qt-SDK-Pfad\qt_static
Bereinigen der Verzeichnisse
Das source Verzeichnis beinhaltet noch einige Dateien und Verzeichnisse, die beim Bauen mit anderen Einstellungen manchmal stören. Deswegen müssen die folgenden Dateien / Verzeichnisse innerhalb von Qt-SDK-Pfad\qt_static gelöscht werden:
- Alle Verzeichnisse mit namen tmp innerhalb von Qt-SDK-Pfad\qt_static
- Alle Dateien in Qt-SDK-Pfad\qt_static\lib außer Readme und dem Verzeichnis Fonts
- Alle Dateien (.exe,.dll) innerhlb des Pfades Qt-SDK-Pfad\qt_static\bin
- Alle Dateien mit folgendem Namen innerhalb Qt-SDK-Pfad\qt_static: Makefile, Makefile.debug, Makefile.release. Keine anderen Makefiles löschen.
Editieren der Konfiguration für den statischen build:
Jetzt müssen einige Konfigurationsdateien editiert werden, damit der statische build funktioniert und damit die mingw c - libraries auch statisch gelinkt werden:
- In der Datei Qt-SDK-Pfad\qt_static\mkspecs\win32-g+.conf müssen die folgenden, fett markierten (oder mit stern markierten) Änderungen gemacht werden:
' QMAKE_CFLAGS_RELEASE = -Os -momit-leaf-frame-pointer' ' QMAKE_LFLAGS = -static -static-libgcc' … ' DEFINES= QT_STATIC_BUILD
- In der Datei Qt-SDK-Pfad\qt_static\qmake\Makefile.win32-g++ müssen die folgenden, fett markierten (oder mit stern markierten) Änderungen gemacht werden:
' LFLAGS = -static -static-libgcc' …
- In der Datei Qt-SDK-Pfad\qt_static\src\3rdparty\webkit\WebKit.pri müssen die folgenden, fett markierten (oder mit stern markierten) Änderungen gemacht werden:
' CONFIG = staticlib* ganz oben einfügen.
Erstellen der statischen Qt Version
- Öffne eine Komandozeile und gehe zu folgendem Pfad: Qt-SDK-Pfad\qt_static
- führe qtenv.bat aus.
- Starte configure.exe mit den benötigten Parametern (min -static). Ich benutze:
- configure.exe -static -debug-and-release -opensource -confirm-license -platform win32-g+ -no-exceptions -dont-process -no-qt3support -webkit -qt-sql-sqlite -qt-zlib -qt-libpng -qt-libjpeg
Die wichtigsten sind: * -static -platform win32-g++ -no-exceptions*
- Nun müssen die makefiles erzeugt werden (nur für die libraries, nicht für die Tools):
- bin\qmake.exe projects.pro QT_BUILD_PARTS="libs" JAVASCRIPTCORE_JIT="yes"
- Jetzt kann Qt gebaut werden:
- mingw32-make.exe
- geh einen Kaffe trinken, das dauert eine Weile. Auf meinem Computer (Laptop mit Intel Core2 Duo T7700 2,4 GHz, 2 GB RAM, Windows 7 Professional, 32 Bit) waren es 3 Stunden.
Sonstiges
Ich rate davon ab, die Tools (designer, assistant, etc.) auch zu bauen, da QtCreator die meisten bereits im Bauch hat. Wenn unbedingt tools benötigt werden (wie lrelease, lupdate), benutzt die aus der dynamischen Version (Qt-SDK-Pfad\qt). Im Zweifelsfall kopiert sie von dort in das bin Verzeichnis der statischen Version (incl. der benötigten dlls).
Optimierungen
Da die Executables teilweise sehr groß werden können, empfielt es sich, sie mittels eines executable Packers etwas kleiner zu machen. Hier empfielt sich z.B. upx (http://upx.sourceforge.net).
Wie integriere ich die statische Qt version in den QtCreator
Öffne QtCreator un gehe zum Menü Extras / Optionen. Wähle den Reiter Qt4:
Select Options - Qt4 - Add
Durch Drücken des Plus Knopfes eine neue Qt-Version hinzufügen
Namen und Pfad zu qmake eingeben (Qt-SDK-Pfad\qt_static\bin\qmake.exe) MinGW Verzeichnis eingeben (von 4.7.0 kopieren) Changes in the settings
Wenn man ein neues Projekt erzeugt, die Frage nach der Qt-Version mit allen Versionen (4.7.0 / 4.7.0 static) beantworten. Neues Projekt anlegen Wenn bereits ein Projekt existiert, dieses öffnen und dann die Option Projekt auswählen (linke Schnellwahl im QtCreator) und eine Einstellung hinzufügen. Projekteinstellungen ändern Um das Projekt als statisch und dynamisch gelinkt zu erstellen, sollte bei den statischen Projekteinstellkungen folgendes hinzugefügt werden: CONFIG+=static Dazu muss man die Projekteinstellungen öffnen, und bei qmake auf Details klicken. Unter Zusätzliche Argumente, folgendes hinzufügen: CONFIG+=static Modifizierter qmake step
In der qmake Projekt Datei (*.pro) muss folgendes hinzugefügt werden:
static { # everything below takes effect with CONFIG ''= static
CONFIG''= static
CONFIG ''= staticlib # this is needed if you create a static library, not a static executable
DEFINES''= STATIC
message("[[User:Maintenance script|Maintenance script]] ([[User talk:Maintenance script|talk]]) static build [[User:Maintenance script|Maintenance script]] ([[User talk:Maintenance script|talk]])") # this is for information, that the static build is done
mac: TARGET = $$join(TARGET,,,_static) #this adds an _static in the end, so you can seperate static build from non static build
win32: TARGET = $$join(TARGET,,,s) #this adds an s in the end, so you can seperate static build from non static build
}
Wenn für die debug Version ein d am Ende des binary Dateinamen seien soll, wird noch folgendes benötigt:
# change the nama of the binary, if it is build in debug mode
CONFIG (debug, debug|release) {
mac: TARGET = $$join(TARGET,,,_debug)
win32: TARGET = $$join(TARGET,,,d)
}
Das wars. Jetzt kann das Projekt statisch oder dynamisch gelinkt werden.