QSqlDatabase: QMYSQL driver not loaded / Build MySQL Plugin
-
Leave it clean, that way you ensure that you're not mixing things on your system while building the driver.
-
Hi,
i'm facing a similiar sort of problem, not completely solvable by the steps above.
I recompiled the QMYSQL-plugin and it's linked to the correct mysql-libraries.
After doing ldd /opt/Qt/5.5/gcc_64/plugins/sqldrivers/libqsqlmysql.so I got this:ldd /opt/Qt/5.5/gcc_64/plugins/sqldrivers/libqsqlmysql.so linux-vdso.so.1 (0x00007fffd7d83000) libmysqlclient.so.18 => /usr/lib64/libmysqlclient.so.18 (0x00007f9eb8607000) libz.so.1 => /lib64/libz.so.1 (0x00007f9eb83f0000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f9eb81b5000) libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f9eb7f9d000) libssl.so.1.0.0 => /lib64/libssl.so.1.0.0 (0x00007f9eb7d34000) libcrypto.so.1.0.0 => /lib64/libcrypto.so.1.0.0 (0x00007f9eb7941000) libQt5Sql.so.5 => /opt/Qt/5.5/gcc_64/lib/libQt5Sql.so.5 (0x00007f9eb7701000) libQt5Core.so.5 => /opt/Qt/5.5/gcc_64/lib/libQt5Core.so.5 (0x00007f9eb6fba000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f9eb6d9d000) libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f9eb6a1b000) libm.so.6 => /lib64/libm.so.6 (0x00007f9eb6719000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f9eb6502000) libc.so.6 => /lib64/libc.so.6 (0x00007f9eb615b000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f9eb5f56000) libicui18n.so.54 => /opt/Qt/5.5/gcc_64/lib/libicui18n.so.54 (0x00007f9eb5ae8000) libicuuc.so.54 => /opt/Qt/5.5/gcc_64/lib/libicuuc.so.54 (0x00007f9eb5739000) libicudata.so.54 => /opt/Qt/5.5/gcc_64/lib/libicudata.so.54 (0x00007f9eb3d0f000) libgthread-2.0.so.0 => /usr/lib64/libgthread-2.0.so.0 (0x00007f9eb3b0d000) librt.so.1 => /lib64/librt.so.1 (0x00007f9eb3904000) libglib-2.0.so.0 => /usr/lib64/libglib-2.0.so.0 (0x00007f9eb35f5000) /lib64/ld-linux-x86-64.so.2 (0x000055fc1f3d8000) libpcre.so.1 => /usr/lib64/libpcre.so.1 (0x00007f9eb338e000)
So, erverything looks fine here.
When I try to connect to the database, it still doesn't work. It seems, QSqlDatabase loads the plugin without problems, setting dabase specific stuff fails.
My code-snippet, containing additional debug-stuff:
QPluginLoader loader; loader.setFileName("/opt/Qt/5.5/gcc_64/plugins/sqldrivers/libqsqlmysql.so"); qDebug() << "PluginLoader worked =" << loader.load(); qDebug() << "Plugin Loader error=" << loader.errorString(); QStringList driverlist =QSqlDatabase::drivers(); qDebug() << "Databases: "; for (int i = 0; i < driverlist.size(); ++i) { qDebug() << driverlist.at(i); } if (!db_opened) { db = new QSqlDatabase(); qDebug() << "Step 1 - Database: is valid=" << db->isValid(); db->addDatabase("QMYSQL3","cooptimedb"); qDebug() << "Step 2 - Database: is valid=" << db->isValid(); db->setHostName("localhost"); db->setDatabaseName("cooptime"); db->setUserName("cooptime"); db->setPassword("..."); db->setPort(3306); qDebug() << "Database\n========\nHostname: " << db->hostName() << "\nDatabasename: " << db->databaseName() << "\nUsername: " << db->userName() << "\nPassword: " << db->password() << "\nPort: " << db->port(); if (! db->open()) { qDebug() << "db errorcode=" << db->lastError().nativeErrorCode(); qDebug() << "db errormessage=" << db->lastError() .text(); }
The output of the code above is:
PluginLoader worked = true Plugin Loader error= "Unknown error" Databases: "QSQLITE" "QMYSQL" "QMYSQL3" "QPSQL" "QPSQL7" Step 1 - Database: is valid= false Step 2 - Database: is valid= false Database ======== Hostname: "" Databasename: "" Username: "" Password: "" Port: -1 db errorcode= "" db errormessage= "Driver not loaded Driver not loaded"
So it seems, the driver still doesn't load.
Any help would be very appreciated. Thanks in advance.
-
Hi and welcome to devnet,
Your code is wrong, you are creating an invalid QSqlDatabase object on the heap and then you call a static function on it.
Please take a look at QSqlDatabase's detailed documentation. There's an example there on how to do the setup and connection.
-
Hi SGaist,
I have a new problem with QMysql, everything worked fine since today, actually when I executede this line
DB = QSqlDatabase::addDatabase( "QMYSQL");
I have this error
libgcc_s.so.1 must be installed for pthread_cancel to work
I don't know why,
the plugin is correctly compiled without error, and using the ldd he found the libgcc_s.so.1
Can you help me please!
-
Hi and welcome to devnet,
Which architecture are on ?
-
Hi and thanks for your quick response
I m working on Ubuntu 64bits
i got thisPrecision-M4600:/usr/local/Trolltech/Qt-4.8.6/plugins/sqldrivers$ ldd libqsqlmysql.so linux-vdso.so.1 => (0x00007ffceb314000) libmysqlclient.so.18 => /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18 (0x00007f7a884c6000) libQtSql.so.4 => /usr/local/Trolltech/Qt-4.8.6/lib/libQtSql.so.4 (0x00007f7a88285000) libQtCore.so.4 => /usr/local/Trolltech/Qt-4.8.6/lib/libQtCore.so.4 (0x00007f7a87d91000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7a87a7f000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7a87868000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7a874a3000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f7a8728a000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7a87086000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7a86e68000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7a86b62000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f7a8695a000) /lib64/ld-linux-x86-64.so.2 (0x00007f7a88c10000)
and this
Precision-M4600:/usr/lib/x86_64-linux-gnu$ ldd libmysqlclient.so.18 linux-vdso.so.1 => (0x00007ffe50bc0000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fe8f4940000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe8f473c000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fe8f451e000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fe8f4218000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe8f3e53000) /lib64/ld-linux-x86-64.so.2 (0x00007fe8f5091000)
If I comment the addBase line in my code everything works fine without connecting to the Database of course.
when I try to list the drivers usingQStringList driverlist =QSqlDatabase::drivers();
I got this
Databases: QSQLITE QMYSQL3 QMYSQL
Everything works fine Monday, I checked the database, I could write on it fine,, but yesterday, it crash my application
hope it can help! -
I have just created a new app with the main function and it works and connect fine to my database.
In my code I comment all the last code that I added this week and SURPRISE it works as well.
the problem is probably due to a third library that i started to use this week. I ll check why it cause a crach to mysql o_O -
What new library did you add ?
-
This one Dahua SDK
You can check by yourslef, they have a source example, PTZControl that works fine, but try to add
DB = QSqlDatabase::addDatabase( "QMYSQL");
and you should get the same error.
this sdk is used to control PTZ cams of Dahua brand.
I changed my code by creating a new app to control cameras and get the informations of position from my big application.put this main instsead of it
#include <QtGui/QApplication> #include "dialog.h" #include <QTextCodec> #include <QObject> #include <QtSql/QSqlDatabase> #include <QStringList> #include <QtSql/QSqlQuery> #include <QtSql/QSqlRecord> #include <QVariant> #include <iostream> int main(int argc, char *argv[]) { QSqlDatabase DB; cout <<endl<< "try connect MYSQL "<< endl; try { DB = QSqlDatabase::addDatabase( "QMYSQL"); } catch(...) { cout << "fatal error"<< endl; } cout << "add database"<< endl; DB.setDatabaseName( "intrusiondetection" ); DB.setUserName( "root" ); DB.setPassword( "root" ); cout << "1"<< endl; DB.setHostName( "" ); cout << "try to connect"<< endl; if (DB.open()) { cout << "QMYSQL correctly connected "<< endl; } else { cout << "QMYSQL not connected "<< endl; } QApplication a(argc, argv); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); Dialog w; w.show(); return a.exec(); }
tell me if you got the same error.?
-
One thing that you should first correct: move the database initialization code after the QApplication object creation.
-
Ubuntu is a unix based OS since it's based on the Debian distribution. QDBus is available on Linux, OS X and Windows (the two later requires that you install dbus by hand)
-
Thanks to your guide, it is working on Kubuntu 16 with Qt 5.8
here is my output :- /opt/Qt5.8.0/5.8/gcc_64/plugins/sqldrivers$ ldd libqsqlmysql.so
linux-vdso.so.1 => (0x00007ffcf0bf4000)
libQt5Sql.so.5 => /opt/Qt5.8.0/5.8/gcc_64/plugins/sqldrivers/./../../lib/libQt5Sql.so.5 (0x00007f28a7452000)
libQt5Core.so.5 => /opt/Qt5.8.0/5.8/gcc_64/plugins/sqldrivers/./../../lib/libQt5Core.so.5 (0x00007f28a6d32000)
libmysqlclient.so.20 => /usr/lib/x86_64-linux-gnu/libmysqlclient.so.20 (0x00007f28a66fa000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f28a6372000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f28a5fa2000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f28a5d82000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f28a5a72000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f28a585a000)
libicui18n.so.56 => /opt/Qt5.8.0/5.8/gcc_64/plugins/sqldrivers/./../../lib/libicui18n.so.56 (0x00007f28a53ba000)
libicuuc.so.56 => /opt/Qt5.8.0/5.8/gcc_64/plugins/sqldrivers/./../../lib/libicuuc.so.56 (0x00007f28a5002000)
libicudata.so.56 => /opt/Qt5.8.0/5.8/gcc_64/plugins/sqldrivers/./../../lib/libicudata.so.56 (0x00007f28a361a000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f28a3412000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f28a320a000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f28a2fea000)
libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f28a2de2000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f28a2aca000)
/lib64/ld-linux-x86-64.so.2 (0x0000560448d0b000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f28a285a000)
- /opt/Qt5.8.0/5.8/gcc_64/plugins/sqldrivers$ ldd libqsqlmysql.so
-
im using qt 5.9 on mac this piece of code worked like charm for me
brew install mysql-connector-c