Qt报的错误也是这个:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7
上文的方法只提到其中两个错误,这一篇是说另一个错误,在无法找到的依赖项中,多了一个:
libmysqlclient.so.18 => not found
实际上,在电脑中查找libmysqlclient.so.
发现目录/usr/lib/x86_64-linux-gnu
下,有更高版本的库:
libmysqlclient.so.20
网上一些方法说在这个目录下,用下面的指令做个软连接:
sudo ln -s libmysqlclient.so.20 libmysqlclient.so.18
我试了,不行,它要求低版本的软件支持。
经过一番思考和查找,想起来之前查看依赖库是用的ldd libqsqlmysql.so
,也就是查看的libqsqlmysql.so
的依赖,说明问题在它这里,是它依赖的版本太低了,于是我猜测重新编译它就可以解决问题。答案是,这是个很机智的想法,确实是Qt的依赖库太老了。下面是具体的做法。
1 两个目录
在电脑中搜索,找到mysql.h和libmysqlclient.so的位置,记下来它们所在的目录。
我的电脑上,两个文件所在的目录如下:
mysql.h :/usr/include
libqsqlmysql.so:/usr/lib/x86_64-linux-gnu
2 编译MySQL驱动库
1 qmake
首先要进入Qt MySQL驱动库源码所在的目录,可以搜索mysql文件夹,找到属于qt下面的一个。可以参考一下我电脑的路径:
~/Qt5.8.0/5.8/Src/qtbase/src/plugins/sqldrivers/mysql
在终端进入该路径,执行:
qmake -o Makefile "INCLUDEPATH+=/usr/include" "LIBS+=/usr/lib/x86_64-linux-gnu/libmysqlclient.so" mysql.pro
把命令中的两个路径替换成上面的步骤得到的路径就可以了。如果提示qmake找不到之类的问题,可能需要设置一下默认的编译器位置:
cd /usr/lib/x86_64-linux-gnu/qt-default/qtchooser/
sudo gedit default.conf
把里面qmake的路径替换成自己的,可以搜索一下自己的在哪里。
然后回到刚才的目录重新执行qmake的那条命令。
成功后执行make
。
2 替换
完成后就得到了新的libqsqlmysql.so,搜索一下电脑里的libqsqlmysql.so,找到最新的那个(创建日期最新),用它替换掉其他的同名的就可以了。