Seite 1 von 1

QMYSQL driver not loaded - Ubuntu

Verfasst: 25. April 2014 21:01
von bitkorn
hallo Forum,
ich bekomme den MySQL Treiber nicht geladen (Fehler im Betreff) und die zig Ergebnisse bei google helfen auch nicht wirklich. Hier in der Suche gab es leider auch nichts passendes (so weit ich suchen konnte).
Ich bin neu in QT und auch in C++ habe ich wenig Erfahrung (komme von Java).

Ubuntu 12.04
QT 5.2

mein Project File Auszug:

Code: Alles auswählen

INCLUDEPATH += "/home/username/Apps/QT/5.2.1/gcc_64/plugins/sqldrivers"
#LIBS += -L/usr/lib/x86_64-linux-gnu libmysqlclient
LIBS ist auskommentiert weil es meint es nicht zu finden obwohl die libmysqlclient.so dort ist.

und die main:

Code: Alles auswählen

#include <QCoreApplication>
#include <QSqlDatabase>
#include <QtSql>

int main(int argc, char *argv[]) {
    QCoreApplication app(argc, argv);
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("test");
    db.setUserName("root");
    db.setPassword("passwd");
    bool ok = db.open();
    if(ok) {
        qDebug("verbunden");
    } else {
        qDebug("Error");
    }
    return app.exec();
}
Es fehlt wohl sehr wahrscheinlich die LIB, die es nicht findet. Obwohl es ja sagt, dass es den driver nicht laden kann.

...wäre echt super wenn mir einer auf die Sprünge helfen kann.
Was ist mit der libmysqlclient falsch?

Re: QMYSQL driver not loaded - Ubuntu

Verfasst: 26. April 2014 08:07
von Christian81
Ein Plugin muss man nicht linken und einen Includepfad braucht man auch nicht. Wenn er das Plugin nicht kennt, sucht er wahrscheinlich nicht an der korrekten Stelle nach den Plugins. Ich würde es mal QCoreApplication::addLibraryPath("/home/username/Apps/QT/5.2.1/gcc_64/") probieren.

Re: QMYSQL driver not loaded - Ubuntu

Verfasst: 26. April 2014 08:54
von bitkorn
danke für deinen Hilfeversuch, aber das hilft leider auch nicht.

Dann mal für das genaue Verständnis. Wie du eigentlich schon schreibst, braucht es nur dieses Plugin was der driver ist!?
Nach dem ganzen googeln war ich etwas überinformiert ...wozu noch etwas weiteres zu dem driver hatte ich nicht verstanden.

Ist es nicht das selbe ob ich INCLUDEPATH für qmake oder deinen Vorschlag mit QCoreApplication::addLibraryPath() benutze?!

Und eigentlich ist "/home/username/Apps/QT/5.2.1/gcc_64/plugins" doch schon bekannt weil dort mein QT installiert ist:
http://qt-project.org/doc/qt-5/qcoreapp ... ibraryPath
Oder hat QT Creator bei der Installation das QT meines Systems gefunden und darum nicht sein eigenes als default genommen?!

So viele Fragen :(
Ich bin echt verzweifelt ...was kann man mehr tun als den Pfad zum Treiber/Plugin zu weisen?

Re: QMYSQL driver not loaded - Ubuntu

Verfasst: 26. April 2014 09:26
von Christian81
INCLUDEPATH - Pfad für den Compiler zum auffinden von Header-Dateien
QCoreApplication::addLibraryPath() - Hinweis für Qt wo er nach Plugins suchen soll. Das ist schon ein himmelweiter Unterschied und zeigt mir, dass hier grundlegende Kenntnisse über Compiler und Plugins fehlen...
Wenn Du Qt selbst kompiliert hast - hast Du Qt wirklich mit dem MySQL-Treiber kompiliert? Ist eine Library für MySQL in /home/username/Apps/QT/5.2.1/gcc_64/plugins/sqldrivers vorhanden und sind alle Dependencies (siehe 'man ldd') vorhanden?

Re: QMYSQL driver not loaded - Ubuntu

Verfasst: 26. April 2014 10:38
von bitkorn
ja, hey, das siehst du richtig ...es fehlen noch Compiler und QT Plugin Kenntnisse. Ich bin verwöhnter Java und PHP Entwickler :oops:
...darum nochmals Danke. Werde mir dann mal das qmake manual geben und wohl noch das gcc.

Zum installieren habe ich den QT online Installer benutzt. Der hat mir alles in ein Verzeichnis gelegt ...inklusive /QT/5.2.1/gcc_64/plugins/sqldrivers/libqsqlmysql.so
Da sollte es doch eigentlich nichts weiteres benötigen?!
Wenn es das Plugin kennt sind doch keine Header Dateien dafür mehr nötig, oder? ...verstehe ich das richtig so weit?

Re: QMYSQL driver not loaded - Ubuntu

Verfasst: 26. April 2014 11:01
von Christian81
Korrekt. Hast Du das mit addPluginPath() mal ausprobiert - ich hatte einen Fehler, der Pfad muss '/home/username/Apps/QT/5.2.1/gcc_64/plugins' sein !
Was sagt QSqlDatabase::drivers() ( http://qt-project.org/doc/qt-4.8/qsqlda ... ml#drivers ) ?
Was sagt 'qmake -query' - ist dort der korrekte Plugin-Pfad (also /home/username/Apps/QT/5.2.1/gcc_64/plugins) aufgeführt? Wenn ja kann es eigentlich nur noch eine fehlende Dependency beim Treiber sein -> ldd libqtmysql.so

Re: QMYSQL driver not loaded - Ubuntu

Verfasst: 26. April 2014 12:01
von bitkorn
in welcher Klasse befindet sich addPluginPath()? ...kanns nicht finden.

Mal die komplette Debug Ausgabe:

Code: Alles auswählen

Debuggen beginnt
&"warning: GDB: Failed to set controlling terminal: Das Argument ist ung\303\274ltig\n"
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7
lastError: 
Debuggen beendet

Code: Alles auswählen

qmake -query
QT_INSTALL_PLUGINS:/home/username/Apps/QT/5.2.1/gcc_64/plugins
da isses:

Code: Alles auswählen

@xubuntu:~/Apps/QT/5.2.1/gcc_64/plugins/sqldrivers$ ldd libqsqlmysql.so
libmysqlclient_r.so.16 => not found
Auf meinem System ist /usr/lib/x86_64-linux-gnu/libmysqlclient_r.so.18

...da könnt ich doch den Ubuntu eigenen benutzen?!:

Code: Alles auswählen

@xubuntu:/usr/lib/x86_64-linux-gnu$ ldd libmysqlclient.so
...da ist alles OK.

Re: QMYSQL driver not loaded - Ubuntu

Verfasst: 26. April 2014 12:27
von Christian81
ich meinte addLibraryPath - aber das muss man ja nun, wie man sieht - nicht mehr machen.
Das Plugin kann nicht geladen werden weil eine Dependency - in deinem Fall libmysqlclient_r.so.16 - nicht vorhanden ist.
Ich würde nicht die Qt-Binaries von der Qt-Seite nehmen sondern die, die direkt von Ubutunu kommen - da hast Du solche Probleme nicht.

Re: QMYSQL driver not loaded - Ubuntu

Verfasst: 26. April 2014 13:44
von bitkorn
*.pro

Code: Alles auswählen

QT      += widgets sql core
CONFIG += console
main.cpp

Code: Alles auswählen

#include <QtCore/QCoreApplication>
#include <QSqlDatabase>
#include <QtSql>
#include <iostream>
#include <QString>
#include <QStringList>
#include <QStringListIterator>

void listLibraryPaths(QCoreApplication &app);

int main(int argc, char *argv[]) {
    QCoreApplication app(argc, argv);
    listLibraryPaths(app);
    QCoreApplication::addLibraryPath("/usr/lib/x86_64-linux-gnu/");
    QCoreApplication::removeLibraryPath("/home/username/Apps/QT/5.2.1/gcc_64/plugins");
    listLibraryPaths(app);
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("test");
    db.setUserName("root");
    db.setPassword("passwd");
    bool ok = db.open();
    if(ok) {
        qDebug("verbunden");
        db.close();
    } else {
        qDebug("no db connection");
    }
    return app.exec();
}

void listLibraryPaths(QCoreApplication &app) {
    QStringList libList = app.libraryPaths();
    if(!libList.empty()) {
        std::cout << "BEGIN" << std::endl;
        for(int i = 0; i < libList.size(); i++) {
            std::cout << libList.value(i).toStdString() << std::endl;
        }
        std::cout << "END" << std::endl;
    } else {
        qDebug("keine libs da");
    }
}
Ausführung

Code: Alles auswählen

Debuggen beginnt
&"warning: GDB: Failed to set controlling terminal: Das Argument ist ung\303\274ltig\n"
BEGIN
/home/username/Apps/QT/5.2.1/gcc_64/plugins
/home/username/QTProjects/build-HelloQtSql-Desktop_Qt_5_2_1_GCC_64bit-Debug
END
BEGIN
/usr/lib/x86_64-linux-gnu
/home/username/QTProjects/build-HelloQtSql-Desktop_Qt_5_2_1_GCC_64bit-Debug
END
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: 
lastError: 
Debuggen beendet
...nu sind alle driver weg ...klar in /home/username/Apps/QT/5.2.1/gcc_64/plugins warn ja alle drin.

ich habs:

Code: Alles auswählen

QCoreApplication::addLibraryPath("/usr/lib/x86_64-linux-gnu/qt5/plugins/");
QCoreApplication::removeLibraryPath("/home/username/Apps/QT/5.2.1/gcc_64/plugins");
...es möchte schon die QT-eigenen haben.
Nu gibt mir db.open() ein TRUE :D

Tausend Dank für deine Geduld ...ich habe viel gelernt.

Re: QMYSQL driver not loaded - Ubuntu

Verfasst: 26. April 2014 15:32
von Christian81
Das sieht mir aber so aus als würden die Qt-Libraries vom System benutzt, nicht die, die Du ins home-Dir installiert hast. Dazu müsstest Du wohl LD_LIBRARY_PATH anpassen

Re: QMYSQL driver not loaded - Ubuntu

Verfasst: 26. April 2014 18:07
von bitkorn
ja, genau weil die im /home/ hatten das Abhängigkeitsproblem.
Bei mir ist libmysqlclient_r.so.16 nicht installiert, nur libmysqlclient_r.so.18

Hast wohl Recht mit LD_LIBRARY_PATH. Guckt sich QT unter Linux also auch die LD_LIBRARY_PATH an.
Die libmysqlclient_r.so.16 müsst ich ja eh installieren.