QMYSQL kompiliert nicht
-
Hy!
Ich habe folgendes Problem: Habe mir die QT Install für mingw runtergeladen, und installiert. Funktioniert sowei auch, nur ist kein QMYSQL Treiber dabei. (Wenn ich versuche eine Datenbankverbindung herzustellen kommt als Fehler:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers:)
Jetzt habe ich versucht den MySql Treiber (das plugin) selbst zu kompilieren, das nach der Beschreibung aus der QT-Referenz. Also:You need to get the MySQL installation files. Run SETUP.EXE and choose "Custom Install". Install the "Libs & Include Files" Module. Build the plugin as follows (here it is assumed that MySQL is installed in C:\MYSQL): cd %QTDIR%\src\plugins\sqldrivers\mysql qmake -o Makefile "INCLUDEPATH+=C:\MYSQL\INCLUDE" "LIBS+=C:\MYSQL\LIB\OPT\LIBMYSQL.LIB" mysql.pro nmake If you are not using a Microsoft compiler, replace nmake with make in the line above.
Habe hierbei die Pfade entsprechend meiner MySql Installation geändert. (Das MySql-Developer Packet ist auch installiert). Als MySql verwende ich v4.1.9.
Wenn ich dann make ausführe bekomme ich als Fehler
C:\Programme\CodeBlocks\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot find -lmysql.lib collect2: ld returned 1 exit status make[1]: *** [..\..\..\..\plugins\sqldrivers\qsqlmysqld.dll] Error 1 make[1]: Leaving directory `C:/Programme/Qt/4.0.0/src/plugins/sqldrivers/mysql' make: *** [debug-all] Error 2
Jemand ne Idee was ich falsch mache?
mfg
uhu01
-
Hy!
Was nicht funktioniert war schon irgendwie klar, er kann das mysql Libray File nicht finden, also hab ich einfach mal -L"C:\xampp\mysql\lib\opt" zum g++ Aufruf dazugeschrieben, und aus lmysql.lib lmysql gemacht, dann hatte er das File zumindest gefunden, der Compiler kann dann allerdings keine der MySql-Funktionen auflösen, d.h. ich bekomme lauter "unresolved extern..." Fehler. Die Funktionen sollten aber in der lmysql deklariert sein, oder?
Also nochmal die Frage: was mach ich falsch?
mfg
uhu01
-
Keine Ahnung du hast zwar viel dazu erzählt aber nicht wirklich was auf deine Linker error schließen lässt. wie wäre es mal wenn du ein paar linker fehlern postest?
Mehr kann ich dazu nicht sagen. aber für den g++ ist .lib keine normale endung ( afair ) sondern eher .a
BR
-
Hy!
Ich habe im QT Archiv einen Beitrag gefunden der dieses Problem beschreibt:
http://lists.trolltech.com/qt-interest/2005-07/thread00014-0.html
Weiter unten ist ein Howto wie es unter Windows funktionieren soll. Habs dann so gemacht, und es lässt sich alles
wundervoll kompilieren (nur release da die debug lib's bei der QT-Install nicht dabei sind)also einfach:
cd c:\xampp\mysql\lib\opt reimp -d libmysql.lib dlltool -k --input-def libmysql.def --dllname libmysql.dll --output-lib libmysql.a
Den mysql-Pfad müsst ihr entsprechend anpassen
und dann
cd c:\programme\qt\4.0.0\src\plugins\sqldrivers\mysql\ qmake -o Makefile "INCLUDEPATH+=C:\xampp\mysql\include" "LIBS+=-LC:\xampp\mysql\lib\opt -lmysql" make
Auch hier den Pfad wieder entsprechend wählen
Jetzt habe ich nur noch ein Problem: Ich habe die qsqlmysql.dll nach <windir>/system32 kopiert,
damit sich gefunden werden kann. Trotzdem kommt beiQSqlDatabase db = QSqlDatabase::addDatabase( "QMYSQL"); db.setHostName( "localhost"); db.setDatabaseName( "tests"); db.setUserName( "root"); db.setPassword( ""); bool ok = db.open();
Der Fehler
QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers:
Wie kann ich den MySql Treiber laden?
mfg uhu01
PS: Für die die's ausprobieren wollen reimp bekommt man hier http://prdownloads.sourceforge.net/mingw/mingw-utils-0.2.tar.gz?download,
wenn man's nicht schon hat.
-
Hier noch eine Zusatzinfo:
Wenn ich bei den Demo's den SQLBrowser probiere, werden dort nur die zwei Treiber angezeigt, die schon dabei waren, SQLite und ODBC, sonst nichts. Benenne ich z.B. im Plugin Ordner eine dll um fällt diese dann auch weg. Der selbstkompilierte MySQL Treiber taucht allerdings nie auf?!
Was ich dabei noch komisch finde: warum werden der SQLite und der ODBC Treiber nicht als verfügbare Treiber angezeigt, wenn sie doch vorhanden sind, und anscheinend auch funktionieren? (In meinem Programm)
Irgendjemand eine Idee?
mfg
uhu01