首先说说我的环境:Ubuntu17.10+Qt5.9.2+Mysql5.7
在连接mysql数据库的时候出现错误
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7
我是个新手,折腾了好久,总算是解决了,记录下来,希望能对大家有些帮助.
遇事先百度,照着试一试...
先进入libqsqlmysql.so所在的目录,在安装目录下的5.9.2/gcc_64/plugins/sqldrivers中.
mini@Vantablack:~$ cd Qt5.9.2/5.9.2/gcc_64/plugins/sqldrivers/
用ldd检查一下依赖关系
mint@Vantablack:-/Qt5.9.2/5.9.2/gcc_64/plugins/sqldriverss ldd libqsqlmysql.so
linux-vdso.so.1 => (ex00007fffaa3ad000)
libQt5sql.so.5 => /home/mini/Qt5.9.2/5.9.2/gcc_64/1ib/libQt5Sql.so.5 (0x00007f7d90380000)
libQt5Core.so.5 => /hone/mini/Qt5.9.2/5.9.2/gcc_64/lib/libQt5Core.so.5 (0x00007f7d8fc45000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7d8fa26000)
libmysqlclient.so.18 => not found
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdC++.s0.6 (0x00007f7d8f6a0000)
...
libmysqlclient.so.18 => not found 有问题,搜索了一下,在/usr/lib/x86_64-linux-gnu/libmysqlclient.so.20里面倒是有个.so.20,版本问题,不要想着改个名字凑合一下,我试过了的,没用...老老实实重新编译.
我的主要问题就出在编译上,首先弄一份源码过来,Src/qtbase中应该有,没有的话就去官网下一个qt-everywhere-opensource-src-5.9.3.tar.xz包,解压出来会有的,进入/qtbase/src/plugins/sqlivers/mysql中,编译.
因为我的mysql库的位置是在/usr/include/mysql,/usr/lib/x86_64-linux-gnu/ 中。所以用第二条,我看到有些地方用的是第一条,大概是因为mysql版本不同所以.so包的位置不同。
qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/mysql -lmysqlclient_r" mysql.pro
qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/x86_64-linux-gnu/ -lmysqlclient" mysql.pro
编译时报错:Project ERROR: Library ‘mysql’ is not defined.
把mysql.pro中的 QMAKE_USE += mysql用#注释掉,然后再来一次.目录下会生成一个Makefile,然后make.
如果make报错:
/usr/bin/ld: cannot find -lmysqlclient_r
那就换用第二条或者是在/usr/lib/mysql/目录下创建一个软链接
sudo ln -sv /usr/lib/x86_64-linux-gnu/libmysqlclient.so /usr/lib/mysql/libmysqlclient_r.so
make之后,如果成功的话,看最后几条的信息,里面会有编译好的libqsqlmysql.so的位置,我的是/home/mini/Qt5.9.2/5.9.2/Src/qtbase/plugins/sqldrivers/
然后cd进去把libqsqlmysql.so复制到安装目录下的5.9.2/gcc_64/plugins/sqldrivers/中.
cp /home/mini/Qt5.9.2/5.9.2/Src/qtbase/plugins/sqldrivers/libqsqlmysql.so /home/mini/Qt5.9.2/5.9.2/gcc_64/plugins/sqldrivers/libqsqlmysql.so
然后应该就没问题了吧。。。