MinGW installieren und Qt mit MySQL statisch kompilieren

Code-Schnippsel, oder Tipps und Tricks, die einem beim Programmieren mit Qt helfen können.
Antworten
RD1978
Beiträge: 84
Registriert: 5. Juni 2007 08:00
Wohnort: Stralsund (DDR)

MinGW installieren und Qt mit MySQL statisch kompilieren

Beitrag von RD1978 »

Da oft danach gefragt wird, stelle ich einfach mal meine Vorgehensweise vor. Ich benutze für die Installation die Versionen Qt-4.3.2 und MySQL-5.0.45. Um eine bessere Übersicht zu behalten, installiere ich alles unterhalb des Verzeichnisses C:\Develop.

MinGW herunterladen und installieren
Quellen
http://www.mingw.org
http://sourceforge.net/project/showfile ... up_id=2435
Folgende Tools „current release“ herunterladen. (Achtung! Nicht die src Pakete.)
gcc-g++-<version>.tar.gz
gcc-core-<version>.tar.gz
binutils-<version>.tar.gz
mingw32-<version>.tar.gz
mingw-runtime-<version>.tar.gz
mingw-utils-<version>.tar.gz
w32api-<version>.tar.gz
Installieren
- Verzeichnis C:\Develop\MinGW anlegen.
- Alle heruntergeladenen Pakete in das Verzeichnis kopieren und hier entpacken.
Umgebungsvariablen setzen
- Start > Systemsteuerung > System > Erweitert > Umgebungsvariablen
- Unter Systemvariablen die Variable Path bearbeiten.
- Am Ende der Einträge, durch ein Semikolon getrennt C:\Develop\MinGW\bin hinzufügen.
Testen
- Eingabeaufforderung öffnen und folgende Befehle ausführen.
- gcc --version sollte die installierte GCC-Version anzeigen.
- mingw32-make --version sollte die installierte Make-Version anzeigen.

MySQL herunterladen und installieren
Quellen
http://www.mysql.com
http://dev.mysql.com/downloads/mysql/5.0.html#win32
Installerversion (mysql-5.0.45-win32.zip) herunterladen.
Installieren
- Nach C:\Develop\MySQL installieren.
- Option C/C++ Header Files installieren auswählen.
- Option Umgebungsvariablen setzen auswählen.
Statische Import-Lib
Da der MinGW Linker nicht zu den MySQL DLL´s (libmysql.dll) kompatibel ist, muß eine statische Import-Lib (libmysql.a) erzeugt werden. Dazu werden zwei Tools (reimp.exe und dlltool.exe) aus dem Paket mingw-utils benötigt, die mit der MinGW Installation oben schon installiert wurden.
- Eingabeaufforderung öffnen und in das Verzeichnis C:\Develop\MySQL\lib\opt wechseln.
- Folgende Befehle ausführen.
- C:\Develop\MySQL\lib\opt>reimp -d libmysql.lib
- C:\Develop\MySQL\lib\opt>dlltool -k -d libmysql.def -l libmysql.a
Damit anschließend bei der Konfiguration von Qt die Pfade für die includes und libs nicht mit angegeben werden müssen, müssen ein paar Dateien umkopiert werden.
- C:\Develop\MySQL\lib\opt\libmysql.a nach C:\Develop\MinGW\lib kopieren.
- Alle Dateien aus C:\Develop\MySQL\include nach C:\Develop\MinGW\include kopieren.

Qt installieren und konfigurieren
Quellen
http://trolltech.com/developer/downloads/qt/windows
Achtung! Das src Paket herunterladen.
Installieren
- Verzeichnis C:\Develop\Qt anlegen.
- qt-win-opensource-src-4.3.2.zip in das Verzeichnis kopieren und hier entpacken.
- Entpackten Ordner umbennen in 4.3.2-static
Konfigurieren
- Datei C:\Develop\Qt\4.3.2-static\mkspecs\win32-g++\qmake.conf öffnen
- QMAKE_LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
- ändern in
- QMAKE_LFLAGS = -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
- Eingabeaufforderung öffnen und in das Verzeichnis C:\Develop\Qt\4.3.2-static wechseln.
- Folgende Befehle ausführen.
- C:\Develop\Qt\4.3.2-static>configure -static -release -no-exceptions -qt-sql-odbc -qt-sql-mysql -qt-sql-sqlite -qt-gif -qt-libpng -qt-libjpeg -qt-libtiff -no-vcproj
- C:\Develop\Qt\4.3.2-static>mingw32-make sub-src
- C:\Develop\Qt\4.3.2-static>mingw32-make sub-tools
Umgebungsvariablen setzen
Start > Systemsteuerung > System > Erweitert > Umgebungsvariablen
Unter Systemvariablen die Variable Path bearbeiten.
Am Ende der Einträge, durch ein Semikolon getrennt C:\Develop\Qt\4.3.2-static\bin hinzufügen.

Fertig ;-)

MfG RD1978
Dateianhänge
qt-mysql-static.rar
Hier nochmal als PDF ;-)
(62.57 KiB) 1025-mal heruntergeladen
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

vielen dank fuer die anleitung, super ding!

ich hatte nur das problem, dass ich das paket "mingw32-<version>.tar.gz" auf der sourceforge-seite (link) nicht gefunden habe.
deshalb habe ich den automatischen installer (fuer windows) genommen und qt damit statisch kompiliert, hat alles geklappt, kein problem.

wenn ich nun aber ein qt-programm kompilieren mittels mingw32-make, verlangt das programm nach "mingwm10.dll" (sofern mingw nicht installiert ist).
ist das normal, kann man das irgendwie umgehen?
ich wollte ja eigentlich gar keine dlls mehr mit den programmen ausliefern muessen.

mfg,
julian
RD1978
Beiträge: 84
Registriert: 5. Juni 2007 08:00
Wohnort: Stralsund (DDR)

Beitrag von RD1978 »

Hallo,

also wenn Du nach dieser Anleitung Qt-4.3.2 kompilliert hast, sollte die mingwm10.dll eigentlich keine Abhängigkeit mehr sein. Die einzige Abhängigkeit die man noch hat, ist die libmysql.dll wenn man sql verwendet.

Die Abhängigkeiten kannst Du mit Dependency Walker überprüfen.

Bei Qt Versionen < 4.3.0 http://www.qtwiki.de/wiki/Mingw10.dll

MfG RD1978
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

ok vielen dank fuer den link, der hats erklaert.
ich hab qt mit "-exeption" kompiliert ....
:)

mfg,
julian
FuzzyKiel
Beiträge: 1
Registriert: 9. Dezember 2008 09:21

Beitrag von FuzzyKiel »

Hallo!
Erstmal vielen Dank für diese Anleitung, hat mir sehr weitergeholfen.
Trotzdem habe ich Probleme damit:
Ich bin nach der Anleitung vorgegangen, habe die jeweils aktuellen Versionen der benötigten Programme verwendet.
Probleme bei "configure" konnte ich mit Hilfe der hier beschriebenen Lösung ausräumen.
Im Anschluss funktionierte "mingw32-make sub-src" ohne weitere fehlermeldungen.
Das Problem tritt jetzt allerdings auf, wenn ich versuche "mingw32-make sub-tools" auszuführen. Hier der Ausschnitt aus meiner Konsole:

Code: Alles auswählen

mingw32-make[5]: Entering directory `D:/Develop/Qt/4.4.3-static/tools/assistant/
tools/assistant'
g++ -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-ps
eudo-reloc -Wl,-s -Wl,-subsystem,windows -o ..\..\..\..\bin\assistant.exe object
_script.assistant.Release  -L"d:\Develop\Qt\4.4.3-static\lib" -L"d:\Develop\Qt\4
.4.3-static\lib" -lmingw32 -lqtmain tmp\obj\release_static\assistant_res.o -LD:/
Develop/Qt/4.4.3-static/plugins/sqldrivers -lQtHelp -lQtCLucene -lQtSql -lQtXml
-lQtGui -lQtNetwork -lmysql -lodbc32 -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwin
mm -lwinspool -lmsimg32 -lQtCore -lkernel32 -luser32 -lshell32 -luuid -lole32 -l
advapi32 -lws2_32
d:\Develop\Qt\4.4.3-static\lib\libQtSql.a(qsql_mysql.o):qsql_mysql.cpp:(.text+0x
e): undefined reference to `mysql_character_set_name@4'
d:\Develop\Qt\4.4.3-static\lib\libQtSql.a(qsql_mysql.o):qsql_mysql.cpp:(.text+0x
8b): undefined reference to `mysql_error@4'
d:\Develop\Qt\4.4.3-static\lib\libQtSql.a(qsql_mysql.o):qsql_mysql.cpp:(.text+0x

--snip--
hier kommen noch ohne ende ähnliche meldungen mit anderen mysql_-variablen
---------

4887): undefined reference to `mysql_stmt_bind_param@8'
d:\Develop\Qt\4.4.3-static\lib\libQtSql.a(qsql_mysql.o):qsql_mysql.cpp:(.text+0x
4e0c): undefined reference to `mysql_stmt_attr_set@12'
collect2: ld returned 1 exit status
mingw32-make[5]: *** [..\..\..\..\bin\assistant.exe] Error 1
mingw32-make[5]: Leaving directory `D:/Develop/Qt/4.4.3-static/tools/assistant/t
ools/assistant'
mingw32-make[4]: *** [release] Error 2
mingw32-make[4]: Leaving directory `D:/Develop/Qt/4.4.3-static/tools/assistant/t
ools/assistant'
mingw32-make[3]: *** [sub-assistant-make_default-ordered] Error 2
mingw32-make[3]: Leaving directory `D:/Develop/Qt/4.4.3-static/tools/assistant/t
ools'
mingw32-make[2]: *** [sub-tools-make_default-ordered] Error 2
mingw32-make[2]: Leaving directory `D:/Develop/Qt/4.4.3-static/tools/assistant'
mingw32-make[1]: *** [sub-assistant-make_default-ordered] Error 2
mingw32-make[1]: Leaving directory `D:/Develop/Qt/4.4.3-static/tools'
mingw32-make: *** [sub-tools] Error 2
Bin für jede Idee dankbar, wie ich die tools doch kompiliert bekomme!

MfG,
Florian
rohaase
Beiträge: 10
Registriert: 12. Oktober 2006 16:23

Beitrag von rohaase »

Hallo,

zuerst ein mal auch von mir herzlichen DANK!
Aber eine Frage .. geht das Verfahren auch in der Windows XP x64 Version
der Mysql Datenbank ..

Habe keine Einschränkung gefunden, aber bei mir kommt immer DRIVER NOT LADED ..

Für einen Hinweis wäre ich dankbar !
RavenIV
Beiträge: 267
Registriert: 21. Januar 2009 14:24
Wohnort: Waldshut

Beitrag von RavenIV »

Sehr schöne Anleitung, gut gemacht.

Aber würdest Du dieses bitte als Tutorial in pdf veröffentlichen?
Danke.
Linux, das längste Text-Adventure aller Zeiten
Mineralwater
Beiträge: 29
Registriert: 6. Mai 2009 16:44
Kontaktdaten:

Beitrag von Mineralwater »

Vielleicht sollte man dennoch erwähnen das beim Anlegen eines Projektes die .pro Datei erweitert werden muss.

Damit der Compiler weiß, dass es sich um eine statische Anwendung handelt, bedarf es einer Erweiterung der .pro Datei um folgende Zeile:

CONFIG += static


Gruß Mineralwater
mcfloppy
Beiträge: 29
Registriert: 9. September 2008 17:35
Kontaktdaten:

Beitrag von mcfloppy »

Hallo Leute,
ich hatte hier das Problem, dass das Kompilieren nicht ging. Das lag nicht wie vermutet an Windows Vista sondern an dem QT Paket. Es scheint, dass das QT Paket mit dem Creator-SDK nicht die vollständigen Sourcen an Bord hat. Auf die Idee bin ich gekommen, als ich mir die Downloadseite genau anschaute. dort steht bei
"Qt SDK: Complete Development Environment"
folgendes:
"Qt libraries"

und bei:
"Qt: Framework Only"
folgendes:
"Modular Qt libraries"

Ich hoffe das Phänomen ist hiermit geklärt :) Auf jedenfall kann ich nun alles sauber kompilieren.

LG Floppy
headsetsniper
Beiträge: 1
Registriert: 5. Mai 2010 22:02

Beitrag von headsetsniper »

hi, ich hab ein riesen problem wenn ich deine anleitung befolge kommt bei mingw32-make sub-src nach einer menge ausgabe die ich irgentwie nicht kopieren kann :
*** release error 2
was mir auffält ist das es dort sehr viele pragma warnings giebt
Antworten