之前用写了一个客户端到服务端的通信,一直在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的资源,果然不出我所料。
这不就是现成的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,那么就点击
然后安装一个mysql开发包
yum install mysql-devel
下载好源码之后,记得解压,命令如下
tar -zxvf qt-everywhere-opensource-src-5.1.0.tar.gz
解压之后的文件夹和压缩包在同一地方,
里面包含四个原始文件
我们要做的就是编译这个文件,看到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文件在哪,如:
如果你对这个路径不熟悉的话,可以使用pwd查看路径
还有一种情况就是make不成功,提示找不到 lmysqlclient_r
使用查找命令
find /usr -name ‘*mysqlclient*’
可以看到是有这个文件的哈,只是找不到,我们做一个软连接
sudo ln -s /usr/lib64/mysql/libmysqlclient_r.so /usr/lib/libmysqlclient_r.so
之后我们再执行make就没有问题了。
其实可以看到这个文件也是指向libmysqlclient.so的
然后找到qt对应的路径
用新生成的libqsqlmysql.so替换掉这个qt自带的libqslqmysql.so就可以正常连接数据库了。