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 bei

    QSqlDatabase 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


Anmelden zum Antworten