How to build a static Qt version for Windows with gcc/de: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
 
No edit summary
Line 1: Line 1:
[[How to build a static Qt version for Windows with gcc|English]] '''German'''
[[Category:Developing with Qt::General]]<br />[[Category:HowTo]]<br />[[Category:Tools::QtCreator]]<br />[[How_to_build_a_static_Qt_version_for_Windows_with_gcc|English]] '''German'''


=Wie baue ich Qt als statische Library für Windows mit gcc=
[toc align_right=&quot;yes&amp;quot; depth=&quot;2&amp;quot;]
 
= Wie baue ich Qt als statische Library für Windows mit gcc =


Diese Anlkeitung beschreibt den Weg, den ich gegangen biun und der bei mir funktioniert. Ich hoffe, es hilft euch ein wenig.
Diese Anlkeitung beschreibt den Weg, den ich gegangen biun und der bei mir funktioniert. Ich hoffe, es hilft euch ein wenig.


==Vorbereitung==
== Vorbereitung ==
 
Al erstes lädt man das Qt <span class="caps">SDK</span> herunter, das man nehmen will und istalliert es (ich benutze 4.7.0 incl. MinGW). Dann kopiert man den kompletten Dateibau des Verzeichnisses qt (Qt-<span class="caps">SDK</span>-Pfad\qt) in ein neues Verzeichnis (Qt-<span class="caps">SDK</span>-Pfad\qt-static).<br /> Die Datei Qt-<span class="caps">SDK</span>-Pfad\bin\qtenv.bat wird in den neuen Ordner kopiert (Qt-<span class="caps">SDK</span>-Pfad\qt-static) und dort bearbeitet: —&gt; ersetze Qt-<span class="caps">SDK</span>-Pfad\qt mit Qt-<span class="caps">SDK</span>-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-<span class="caps">SDK</span>-Pfad\qt_static gelöscht werden:
Al erstes lädt man das Qt SDK herunter, das man nehmen will und istalliert 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).<br />Die Datei Qt-SDK-Pfad\bin\qtenv.bat wird in den neuen Ordner kopiert (Qt-SDK-Pfad\qt-static) und dort bearbeitet:<br /> —&amp;gt; ersetze Qt-SDK-Pfad\qt mit Qt-SDK-Pfad\qt_static


* Alle Verzeichnisse mit namen tmp innerhalb von Qt-<span class="caps">SDK</span>-Pfad\qt_static
== Bereinigen der Verzeichnisse ==
* Alle Dateien in Qt-<span class="caps">SDK</span>-Pfad\qt_static\lib\, außer Readme und dem Verzeichnis Fonts
* Alle Dateien (*.exe, *.dll) innerhlb des Pfades Qt-<span class="caps">SDK</span>-Pfad\qt_static\bin
* Alle Dateien mit folgendem Namen innerhalb Qt-<span class="caps">SDK</span>-Pfad\qt_static: Makefile, Makefile.debug, Makefile.release. Keine anderen Makefiles löschen.


==Editieren der Konfiguration für den statischen build:==
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:<br />* Alle Verzeichnisse mit namen tmp innerhalb von Qt-SDK-Pfad\qt_static<br />* Alle Dateien in Qt-SDK-Pfad\qt_static\lib außer Readme und dem Verzeichnis Fonts<br />* Alle Dateien ('''.exe,'''.dll) innerhlb des Pfades Qt-SDK-Pfad\qt_static\bin<br />* Alle Dateien mit folgendem Namen innerhalb Qt-SDK-Pfad\qt_static: Makefile, Makefile.debug, Makefile.release. Keine anderen Makefiles löschen.


Jetzt müssen einige Konfigurationsdateien editiert werden, damit der statische build funktioniert und damit die mingw c – libraries auch statisch gelinkt werden:
== Editieren der Konfiguration für den statischen build: ==


* In der Datei Qt-<span class="caps">SDK</span>-Pfad\qt_static\mkspecs\win32-g++\qmake.conf müssen die folgenden, fett markierten (oder mit stern markierten) Änderungen gemacht werden:
Jetzt müssen einige Konfigurationsdateien editiert werden, damit der statische build funktioniert und damit die mingw c - libraries auch statisch gelinkt werden:<br />* 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:<br />'''''' QMAKE_CFLAGS_RELEASE = '''-Os -momit-leaf-frame-pointer'''<br />'''''' QMAKE_LFLAGS = '''-static -static-libgcc''' …<br />'''''' DEFINES''= '''QT_STATIC_BUILD'''<br />* 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:<br />'''''' LFLAGS = '''-static -static-libgcc''' …<br />* 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:<br />'''''' '''CONFIG ''= staticlib* ganz oben einfügen.
** <span class="caps">QMAKE</span>_CFLAGS_RELEASE = '''-Os -momit-leaf-frame-pointer'''
<br />h2. Erstellen der statischen Qt Version
** <span class="caps">QMAKE</span>_LFLAGS = '''-static -static-libgcc''' …
<br /># Öffne eine Komandozeile und gehe zu folgendem Pfad: Qt-SDK-Pfad\qt_static<br /># führe qtenv.bat aus.<br /># Starte configure.exe mit den benötigten Parametern (min -static). Ich benutze:<br />* 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<br />''' Die wichtigsten sind: * -static -platform win32-g++ -no-exceptions*<br /># Nun müssen die makefiles erzeugt werden (nur für die libraries, nicht für die Tools):<br />* bin\qmake.exe projects.pro QT_BUILD_PARTS=&quot;libs&amp;quot; JAVASCRIPTCORE_JIT=&quot;yes&amp;quot;<br /># Jetzt kann Qt gebaut werden:<br />* mingw32-make.exe<br />* 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.
** <span class="caps">DEFINES</span> += '''QT_STATIC_BUILD'''
* In der Datei Qt-<span class="caps">SDK</span>-Pfad\qt_static\qmake\Makefile.win32-g++ müssen die folgenden, fett markierten (oder mit stern markierten) Änderungen gemacht werden:
** <span class="caps">LFLAGS</span> = '''-static -static-libgcc''' …
* In der Datei Qt-<span class="caps">SDK</span>-Pfad\qt_static\src\3rdparty\webkit\WebKit.pri müssen die folgenden, fett markierten (oder mit stern markierten) Änderungen gemacht werden:
** '''<span class="caps">CONFIG</span> += staticlib''' ganz oben einfügen.


==Erstellen der statischen Qt Version==
== Sonstiges ==


# Öffne eine Komandozeile und gehe zu folgendem Pfad: Qt-<span class="caps">SDK</span>-Pfad\qt_static
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).
# 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” <span class="caps">JAVASCRIPTCORE</span>_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 <span class="caps">RAM</span>, Windows 7 Professional, 32 Bit) waren es 3 Stunden.


==Sonstiges==
== Optimierungen ==


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-<span class="caps">SDK</span>-Pfad\qt). Im Zweifelsfall kopiert sie von dort in das bin Verzeichnis der statischen Version (incl. der benötigten dlls).
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. &quot;upx&amp;quot;:http://upx.sourceforge.net (http://upx.sourceforge.net).


==Optimierungen==
= Wie integriere ich die statische Qt version in den QtCreator =


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. [http://upx.sourceforge.net upx] ''[upx.sourceforge.net]'' (http://upx.sourceforge.net).
Öffne QtCreator un gehe zum Menü Extras / Optionen. Wähle den reiter Qt4:<br /> [[Image:http://lh6.ggpht.com/_m1PNLlZctqY/TPkPz5RZzzI/AAAAAAAAABI/MnKODV6mfNs/s640/Options.jpg|Select Options - Qt4 - Add]]


=Wie integriere ich die statische Qt version in den QtCreator=
Durch Drücken des Plus Knopfes eine neue Qt version hinzufügen<br /> Namen und Pfad zu qmake eingeben (Qt-SDK-Pfad\qt_static\bin\qmake.exe)<br /> MinGW Verzeichnis eingeben (von 4.7.0 kopieren)<br /> [[Image:http://lh4.ggpht.com/_m1PNLlZctqY/TPkP0ABWgJI/AAAAAAAAABM/coniya1Bqs8/s640/Options2.jpg|Changes in the settings]]


Öffne QtCreator un gehe zum Menü Extras / Optionen. Wähle den reiter Qt4: [[Image:Options.jpg|Select Options - Qt4 - Add]]
Wenn man ein neues Projekt erzeugt, die Frage nach der Qt Version mit allen Versionen (4.7.0 / 4.7.0 static) beantworten.<br />[[Image:http://lh4.ggpht.com/_m1PNLlZctqY/TPkPz6SLwzI/AAAAAAAAABE/HlpDXpa4UgU/s640/NewProject.jpg|Neues Projekt anlegen]]<br />Wenn bereits ein Projekt existiert, dieses öffnen und dann die Option Projekt auswählen (linke Schnellwahl im QtCreator) und eine einstellung hinzufügen.<br />[[Image:http://lh4.ggpht.com/_m1PNLlZctqY/TPkP0aU1cLI/AAAAAAAAABQ/vJwJ8FsuToA/s640/Projects_details.jpg|Projekteinstellungen ändern]]<br />Um das Projekt als statisch und dynamisch gelinkt zu erstellen, sollte bei den statischen Projekteinstellkungen folgendes hinzugefügt werden: CONFIG+=static<br />Dazu muss man die Projekteinstellungen öffnen, und bei qmake auf Details klicken. Unter Zusätzliche Argumente, folgendes hinzufügen: '''CONFIG+=static'''<br />[[Image:http://lh5.ggpht.com/_m1PNLlZctqY/TPkQ_DmTqkI/AAAAAAAAABg/JfY90Q-xXRU/s640/Projects_details2.jpg|Modifizierter qmake step]]


Durch Drücken des Plus Knopfes eine neue Qt version hinzufügen Namen und Pfad zu qmake eingeben (Qt-<span class="caps">SDK</span>-Pfad\qt_static\bin\qmake.exe) MinGW Verzeichnis eingeben (von 4.7.0 kopieren) [[Image:Options2.jpg|Changes in the settings]]
In der qmake Projekt Datei (*.pro) muss folgendes hinzugefügt werden:<br /><code><br />static { # everything below takes effect with CONFIG ''= static<br /> CONFIG''= static<br /> CONFIG ''= staticlib # this is needed if you create a static library, not a static executable<br /> DEFINES''= STATIC<br /> message(&quot;<sub></sub>~ static build <sub></sub>~&quot;) # this is for information, that the static build is done<br /> mac: TARGET = $$join(TARGET,,,_static) #this adds an _static in the end, so you can seperate static build from non static build<br /> win32: TARGET = $$join(TARGET,,,s) #this adds an s in the end, so you can seperate static build from non static build<br />}<br /></code>


Wenn man ein neues Projekt erzeugt, die Frage nach der Qt Version mit allen Versionen (4.7.0 / 4.7.0 static) beantworten. <br />[[Image:NewProject.jpg|Neues Projekt anlegen]]<br /> Wenn bereits ein Projekt existiert, dieses öffnen und dann die Option Projekt auswählen (linke Schnellwahl im QtCreator) und eine einstellung hinzufügen.<br />[[Image:Projects_details.jpg|Projekteinstellungen ändern]]<br /> Um das Projekt als statisch und dynamisch gelinkt zu erstellen, sollte bei den statischen Projekteinstellkungen folgendes hinzugefügt werden: <span class="caps">CONFIG</span>+=static<br /> Dazu muss man die Projekteinstellungen öffnen, und bei qmake auf Details klicken. Unter Zusätzliche Argumente, folgendes hinzufügen: '''<span class="caps">CONFIG</span>+=static'''<br />[[Image:Projects_details2.jpg|Modifizierter qmake step]]
Wenn für die debug Version ein d am Ende des binary Dateinamen seien soll, wird noch folgendes benötigt:<br /><code><br /># change the nama of the binary, if it is build in debug mode<br />CONFIG (debug, debug|release) {<br /> mac: TARGET = $$join(TARGET,,,_debug)<br /> win32: TARGET = $$join(TARGET,,,d)<br />}<br /></code>
 
In der qmake Projekt Datei (*.pro) muss folgendes hinzugefügt werden:<br />
 
Wenn für die debug Version ein d am Ende des binary Dateinamen seien soll, wird noch folgendes benötigt: <br />


Das wars. Jetzt kann das Projekt statisch oder dynamisch gelinkt werden.
Das wars. Jetzt kann das Projekt statisch oder dynamisch gelinkt werden.
===Categories:===
* [[:Category:Developing-with-Qt|Developing with Qt]]
** [[:Category:Developing-with-Qt::General|General]]
* [[:Category:German|German]]
* [[:Category:HowTo|HowTo]]
* [[:Category:Tools|Tools]]
** [[:Category:Tools::QtCreator|QtCreator]]

Revision as of 08:56, 24 February 2015




English German

[toc align_right="yes&quot; depth="2&quot;]

Wie baue ich Qt als statische Library für Windows mit gcc

Diese Anlkeitung beschreibt den Weg, den ich gegangen biun und der bei mir funktioniert. Ich hoffe, es hilft euch ein wenig.

Vorbereitung

Al erstes lädt man das Qt SDK herunter, das man nehmen will und istalliert 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:
—&gt; 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.
h2. 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&quot; JAVASCRIPTCORE_JIT="yes&quot;
# 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&quot;:http://upx.sourceforge.net (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:

<br />static { # everything below takes effect with CONFIG ''= static<br /> CONFIG''= static<br /> CONFIG ''= staticlib # this is needed if you create a static library, not a static executable<br /> DEFINES''= STATIC<br /> message(&quot;<sub></sub>~ static build <sub></sub>~&quot;) # this is for information, that the static build is done<br /> mac: TARGET = $$join(TARGET,,,_static) #this adds an _static in the end, so you can seperate static build from non static build<br /> win32: TARGET = $$join(TARGET,,,s) #this adds an s in the end, so you can seperate static build from non static build<br />}<br />

Wenn für die debug Version ein d am Ende des binary Dateinamen seien soll, wird noch folgendes benötigt:

<br /># change the nama of the binary, if it is build in debug mode<br />CONFIG (debug, debug|release) {<br /> mac: TARGET = $$join(TARGET,,,_debug)<br /> win32: TARGET = $$join(TARGET,,,d)<br />}<br />

Das wars. Jetzt kann das Projekt statisch oder dynamisch gelinkt werden.