C++学习笔记(十) - Qt 连接数据库出现的另一个错误

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.hlibmysqlclient.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,找到最新的那个(创建日期最新),用它替换掉其他的同名的就可以了。

你可能感兴趣的:(C++学习笔记(十) - Qt 连接数据库出现的另一个错误)