Qt 5.10 编译mysql驱动----因为发布的程序部署到其他机器无法实现数据库登陆引发的血案

     在Qt中首次使用Mysql数据库时,是否还记得自己曾踩过的坑?当我们满怀期待的根据官方的例子,写出了满意的程序,结果运行时告诉你:

 QSqlDatabase: QMYSQL driver not loaded

QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7

     明明就有驱动嘛,为什么还不能加载呢?这个问题现在上网一搜就一大堆的回答,我们可以知道这么几件事:

(1)Qt中Mysql数据库的操作需要两个库:qsqlmysql.dll(qsqlmysqld.dll),libmysql.dll。前者为Qt官方提供的数据库驱动,后者为MySql提供的C++的数据库连接驱动库。

(2)要想连接操作数据库,这两个库必须加载成功,需要满足的条件是:需要位数相同,版本对应。

MinGW_32bit版本编译出的动态链接库是32位的,因此对应因该使用32位的库。所谓版本对应就是指所采用的Qt驱动库应当是所选用的mysql驱动库版本编译出来的。这就是Qt5版本(5.10.0\mingw53_32\plugins\sqldrivers目录下)为我们提供了驱动程序却常常无法使用的原因,即使我们将自己安装的Mysql客户端bin目录中libmysql.dll拷入了Qt的bin目录,或者将之加入了环境变量.

(3)因此,你成功的前提是:要么别人为你提供了两个对应版本的驱动库,要么你自己去编译一个Qt的驱动库吧

    于是,当时的我选择了去Mysql的官网碰碰运气,说不定就下载到了一个与官方给出的驱动库相匹配的库呢?我怀着忐忑的心情下载了一个版本:mysql-connector-c-6.1.10-win32,(https://downloads.mysql.com/archives/c-c/),将libmysql.dll库拷贝到了Qt mingw版本的bin目录。令人振奋的是居然可以,那一刻的我感到自己是多么的幸运,如果没有后来的事,我可能会一致这么觉得。

    后来做项目,程序需要发布出来,但是当我将项目发布出来,在自己的开发机上完美运行,部署到其他计算机时,竟然无法连接数据库!!我查看了一下打印的日志,又出现了那个最初的梦魇:

 QSqlDatabase: QMYSQL driver not loaded

QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7

        显然这个不知道怎么就可以使用的动态库是不可靠的,重新换了一下libmysql.dll还是不行,我甚至怀疑在某个不为人知的地方,存在着一个无比契合的链接库,于是坚韧不拔的我又检查了一遍环境变量的Path目录,毫无收获。折腾了半天,不得不放弃了那个“拿过来就能用的幼稚想法”,重新将源码编译了一下。其实现在IDE很善良,直接在Qt Creator里编译源码是没有任何问题的,(甚至你可能需要不走寻常路的编译操作,还可以自定义编译步骤),(我也搞不懂自己是怎么想的,可能就是想偷下懒)。简单说下怎么编译的吧,这方面的教程一搜索一大堆。

1、准备Qt mysql驱动源码,以及mysql官方驱动动态连接库

mysql动态连接库,可以去mysql官网下载C++驱动,32位的也可以在这里下载https://download.csdn.net/download/CSDN_DTEO/11991256      

Qt源码如果你在安装的时候就装了,那就可以直接干事情了。如果没有,可以去官方网站下载,也可以用工具自己更新一下。

2、打开工程,修改工程文件,引入mysql动态链接库目录

打开D:\Qt\Qt5.10.0\5.10.0\Src\qtbase\src\plugins\sqldrivers\mysql\mysql.pro工程项目,这个工程就是mysql驱动的源码了,(D:\Qt\Qt5.10.0是我自己的安装目录)。特别注意的是,直接打开就行了,不要想着单独把这个工程复制出来再打开,那样打开后会发现找不到源码,你得自己添加。直接打开会发现构建的时候就出现了错误,不要慌,没关系,无非就是找不到文件嘛,所以你需要根据提示修改一下工程文件,比如什么Can not read qtsqldrivers-config.pri ,对应qsqldriverbase.pri文件中的设置是:

include($$shadowed($$PWD)/qtsqldrivers-config.pri)

我就到目录下找了一下,根本就没有这个文件,但是看意思无非就需要一个这样的配置文件,在它的上一级目录就可以找到configure.pri,将这个路径添加上或者说将原来的修改了:

#include($$shadowed($$PWD)/qtsqldrivers-config.pri)
include(D:/Qt/Qt5.10.0/5.10.0/Src/qtbase/src/plugins/sqldrivers/configure.pri)

   实际上,稍微看一下这个目录结构,看一下工程文件里的配置,就会发现这三个文件的依赖关系从上至下为:mysql.pro->qsqldriverbase.pri->configure.pri 

mysql:

qsqldriverbase.pri

  当然,除此之外,当然还需要添加官方mysql动态连接库位置,在mysql.pro中添加(填写自己的位置):

win32: LIBS += -LE:/package/mysql-connector-c-6.1.10-win32/lib/ -llibmysql
INCLUDEPATH += E:/package/mysql-connector-c-6.1.10-win32/include
DEPENDPATH += E:/package/mysql-connector-c-6.1.10-win32/include

修改后的文件如下:

mysql.pro

qsqldriverbase.pri

3、修改好后,直接编译,编译成功后,可以在Qt安装目录所在的磁盘根目录找到一个plugins的文件夹,将该目录下的动态链接库拷贝到D:\Qt\Qt5.10.0\5.10.0\mingw53_32\plugins\sqldrivers ,替换原来的(如果不放心,备份一下原来的)

同时,将mysql官方驱动libmysql.dll拷贝到D:\Qt\Qt5.10.0\5.10.0\mingw53_32\bin

 

如果你实在太懒了,不想自己去编译,可以下载我编译好的,下载地址:

https://download.csdn.net/download/CSDN_DTEO/12048584

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值