simon
simon

Reputation: 1234

MySql QT QMYSQL driver not loaded

I try to use the MySQL module from QT but without result, the module is present but Qt does not load it. I have this error

QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7 QSqlError("", "Driver not loaded", "Driver not loaded")

if I make a ldd libqsqlmysql.so I get this result

linux-vdso.so.1 (0x00007ffe89950000) libmysqlclient_r.so.16 => not found libQt5Sql.so.5 => /opt/Qt/5.4/gcc_64/plugins/sqldrivers/./../../lib/libQt5Sql.so.5 (0x00007fdc67aaf000) libQt5Core.so.5 => /opt/Qt/5.4/gcc_64/plugins/sqldrivers/./../../lib/libQt5Core.so.5 (0x00007fdc67372000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fdc6706b000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdc66cc2000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fdc66aa4000) libicui18n.so.53 => /opt/Qt/5.4/gcc_64/plugins/sqldrivers/./../../lib/libicui18n.so.53 (0x00007fdc66658000) libicuuc.so.53 => /opt/Qt/5.4/gcc_64/plugins/sqldrivers/./../../lib/libicuuc.so.53 (0x00007fdc662cd000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fdc660c8000) libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007fdc65ec6000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fdc65cbe000) libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fdc659c5000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fdc656c4000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fdc654ae000) /lib64/ld-linux-x86-64.so.2 (0x00007fdc67f1c000) libicudata.so.53 => /opt/Qt/5.4/gcc_64/plugins/sqldrivers/./../../lib/libicudata.so.53 (0x00007fdc63e25000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fdc63be8000)

the problem is I think this line libmysqlclient_r.so.16 => not found

If I make a locate mysqlclient I get this reuslt

/usr/lib/x86_64-linux-gnu/libmysqlclient.so.18 /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0 /usr/lib/x86_64-linux-gnu/libmysqlclient_r.so.18 /usr/lib/x86_64-linux-gnu/libmysqlclient_r.so.18.0.0 /usr/share/doc/libmysqlclient18 /usr/share/doc/libmysqlclient18/NEWS.Debian.gz /usr/share/doc/libmysqlclient18/changelog.Debian.gz /usr/share/doc/libmysqlclient18/changelog.gz /usr/share/doc/libmysqlclient18/copyright /var/cache/apt/archives/libmysqlclient18_5.5.43-0+deb7u1_amd64.deb /var/cache/apt/archives/libmysqlclient18_5.5.44-0+deb7u1_amd64.deb /var/lib/dpkg/info/libmysqlclient18:amd64.list /var/lib/dpkg/info/libmysqlclient18:amd64.md5sums /var/lib/dpkg/info/libmysqlclient18:amd64.postinst /var/lib/dpkg/info/libmysqlclient18:amd64.postrm /var/lib/dpkg/info/libmysqlclient18:amd64.shlibs

I read about some forum, the need to make a symbolic link I tried but I always this error

Upvotes: 0

Views: 2764

Answers (3)

fb77
fb77

Reputation: 96

I know it is an old question, but I had the same issue with a slightly different solution probably due to Qt updates since then.

I will provide the solution that worked for me running Fedora 26 with kernel 4.13 and Qt 5.9.1

Find your path to Qt installation and let's call it here QTDIR. In my case it is installed at /home/Qt5. So QTDIR = /home/Qt5/ My version is 5.9.1. Therefore I also have a folder "5.9.1" in QTDIR and I will call it "version" folder as Pepe did above. The last folder that depends on your installation is the compiler folder. In my case it is gcc_64 inside QTDIR/version/

Now that you located yourself, let's go the procedure to install the drivers for Qt.

1) If your linux distribution doesn't come with SQL headers installed you must install them first. In Fedora I istalled the community-mysql-devel

> sudo dnf install community-mysql-devel

You must search and the install the appropriate SQL package for your distro. Just remember that the main idea is to install some development package in order to access the headers.

2) The second thing you need to do is to make sure you had installed Qt with the sources directory. Check if you have the foulder $QTDIR/version/Src. If you have not, then run the maintenance tool in QTDIR and add Src foulder by checking the "sources" option under the kit you had installed (or wish to install).

3) Then go to where the sqldrivers should be by typing in your terminal

> cd yourQTDIR/yourVersion/Src/qtbase/src/plugins/sqldrivers

and run on terminal:

> make
> make install

This should create the drivers libqsqlite.so and libqsqlmysql.so in the folder: yourQTDIR/yourVersion/yourCompiler/plugins/sqldrivers

We then move to update a path to the sql headers as described in the official site http://doc.qt.io/qt-5/sql-driver.html, but with a slightly difference in the path to mysql headers (you must verify the proper folders in your OS). In my case MYSQL headers are in /usr/lib64. Go to

> cd yourQTDIR/yourVersion/Src/qtbase/src/plugins/sqldrivers/mysql

Then run

> yourQTDIR/yourVersion/yourCompilerFolder/bin/qmake "INCLUDEPATH+=/usr/include" "LIBS+=-L/usr/lib64 -lmysqlclient_r" mysql.pro
> make
> make install

This should do the trick.

4) Now go to "yourQTDIR"/"yourVersion"/"yourCompiler"/plugins/sqldrivers and run

> ldd libqsqlmysql.so

This will allow you to check if there is any missing link and direct you to a more specific solution to your case.

In a couple of Qt versions from now the procedure above may change. However the main points to keep in mind are that 1) you must have the MYSQL headers installed; 2) you must create the plugin by running make and make install in some source folder for MYQSL, and 3) you must update the path to MYSQL headers in order to Qt to find it.

Upvotes: 0

simon
simon

Reputation: 1234

I finally found a solution to my problem, so I have download libmysqlclient16 from libmysqlclient16 Debian amd64

After I made dpkg -i libmysqlclient16_5.1.73-1_amd64.deb

I restart and I compile my Qt project and I could not error

Upvotes: 1

peppe
peppe

Reputation: 22734

Assuming that for getting this error you installed Qt from the binary packages downloaded from qt.io:

  • Install the MySQL client dev packages
  • Run the MaintenanceTool (somewhere where you installed Qt)
  • Ask it to install extra packages
  • Install the "Source Components" for at least the Essential modules
  • Go to /dir/where/you/installed/Qt/version/Source/
  • Go into qtbase/src/plugins/sqldrivers/mysql
  • Run qmake from the very same Qt version (/dir/where/you/installed/Qt/version/arch/bin/qmake or similar)
  • Run make, if it explodes with headers/libraries not found check that you installed those MySQL client dev packages correctly

That should give you a brand new plugin, and with fingers crossed, it's already put in the right place. Otherwise find the new libqsqlmysql.so, ldd it to be sure it was OK, and overwrite the old plugin with the new one.

Upvotes: 1

Related Questions