之前用写了一个客户端到服务端的通信,一直在windows上面运行,今天想着把服务端挂在云服务器上面测试测试,一个mysql驱动搞了我一天,找了好多资料,最终是把它给解决掉了,记录一下,希望可以帮助到后面的人。

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7

提示无法加载驱动

我觉得你应该知道是libqsqlmysql.so的问题了,关于编译mysql驱动的资料,每篇最后的解决方案都聚焦在了libqsqlmysql.so这个文件。

如果你真是第一篇资料就点到了这里,那么这篇或许可以帮你解决掉问题。

无论我们前面要下载什么什么,要设置什么什么,最终的本质是我们要获取libqsqlmysql.so这个文件

机智的我就去逛了逛csdn的资源,果然不出我所料。

Centos上编译qt程序缺少mysql驱动解决方案_服务端


这不就是现成的libqsqlmysql.so文件吗,直接拷贝过来不就可以了。

是的,之前提示无法加载数据库驱动的错误消失了,但是不要高兴,随着而来的是下面的错误

Cannot mix incompatible Qt library (version 0x50xxx) with this library (version 0x50xxx)。

于是我又开始解决这个错误,经过一番折腾,我放弃了,我知道这是由于版本不对导致的错误,但是解决不了,我决定把这个libqsqlmysql.so删掉,根据网上的资料生成版本统一的libqsqlmysql.so。

这里下载的libqsqlmysql.so本身是没问题的,只是版本问题,如果你们qt的版本和资源说明的版本相同,我倒是觉得可以试试。

下面来看正儿八经的编译生成这个文件。

网上第一种情况是,你还没有安装qt,这时,你安装qt的时候可以选择安装源码,这一种方法我觉得是最扯的,我都开始编译程序才包的这个错,你要我重新安装一次qt吗~~~~

第二种是从qt官方下载源码,我觉得这种方法才靠谱。

这个是网址http://download.qt.io/archive/qt/,找到和你qt版本相对应的源码包。

比如我是5.1.0,那么就点击

Centos上编译qt程序缺少mysql驱动解决方案_qt缺少mysql驱动_02


Centos上编译qt程序缺少mysql驱动解决方案_服务端_03

然后安装一个mysql开发包
yum install mysql-devel

下载好源码之后,记得解压,命令如下

tar -zxvf qt-everywhere-opensource-src-5.1.0.tar.gz

解压之后的文件夹和压缩包在同一地方,

Centos上编译qt程序缺少mysql驱动解决方案_mysql_04

里面包含四个原始文件

Centos上编译qt程序缺少mysql驱动解决方案_mysql_05


我们要做的就是编译这个文件,看到pro后缀的文件应该不陌生了。

怎么编译呢,执行qmake

如果qmake已经配置好了环境变量,可以使用qmake命令,对pro文件进行编译,如果提示qmake为无效命令,可以使用如下路径进行编译,还是在这个文件夹目录下,找到你安装qt的目录,比如我的/opt/Qt5.1.0/5.1/gcc_64/bin,在这个目录下你可以找到qmake,使用这个路径对pro进行编译。
命令如下:
/opt/Qt5.1.0/5.1/gcc_64/bin/qmake

执行之后会生成Makefile文件

然后执行make

如果成功的话,你在最后的输出行看到libqsqlmysql.so文件在哪,如:

Centos上编译qt程序缺少mysql驱动解决方案_mysql_06


如果你对这个路径不熟悉的话,可以使用pwd查看路径

Centos上编译qt程序缺少mysql驱动解决方案_qt缺少mysql驱动_07


还有一种情况就是make不成功,提示找不到 lmysqlclient_r

使用查找命令
find /usr -name ‘*mysqlclient*’

Centos上编译qt程序缺少mysql驱动解决方案_服务端_08

可以看到是有这个文件的哈,只是找不到,我们做一个软连接

sudo ln -s /usr/lib64/mysql/libmysqlclient_r.so /usr/lib/libmysqlclient_r.so

之后我们再执行make就没有问题了。

其实可以看到这个文件也是指向libmysqlclient.so的

Centos上编译qt程序缺少mysql驱动解决方案_qt缺少mysql驱动_09

然后找到qt对应的路径

Centos上编译qt程序缺少mysql驱动解决方案_服务端_10

用新生成的libqsqlmysql.so替换掉这个qt自带的libqslqmysql.so就可以正常连接数据库了。