这里写了QT下编译64位的MySQL和32位的MySQL驱动方法,和QT报错:MYSQL Driver not load解决。
(如果直接看驱动的编译请看第二点)
1、首先先看你的Qt安装路径下的sqldrivers目录下是否有qsqlmysql.dll和qsqlmysqld.dll动态库文件。
如:我安装的是32位MySQL我就去32 位的mingw的目录下找sqldrivers目录,如果是安装的64位的MySQL就去64位下的mingw目录下找sqldrivers目录。(使用的编译器的位数要和MySQL的位数一致)
原本我的也没有,我这里是已经编译过了的结果(在32位编译器下MySQL也是32位)
这是64位下的:
如果有这两个文件,就直接将对应版本的libmysql.dll(qsqlmysql.dll和qsqlmysqld.dll一定是要和相同版本下的MySQL的libmysql.dll配套使用,不然不行,一定要配套!)拷贝到你安装的Qt的安装路径的bin目录下即可解决报错 。如:我的放到 D:\QT\5.14.2\mingw73_32\bin 下
如果没有,那么就去找QT源码中的mysql的驱动工程 自行编译,然后再生成qsqlmysql.dll和qsqlmysqld.dll库文件拷贝到sqldrivers目录下。以及对应版本的ibmysql.dll拷贝到你安装的Qt的bin目录下。
2、自行编译MySQL驱动工程操作
2.1 如果你还没安装mysql、或者你的qt只有64位的编译器
先到mysql官网(https://downloads.mysql.com/archives/community/)去下载与你想要拷贝的libmysql.dll库文件的版本一致的mysql安装源码包(我这里是mysql-5.6.36-win32.zip,解压后如\mysql-5.6.36-win32\lib目录下有你所需要的libmysql.dll库文件)
在你的QT安装路径下找到源码目录,如果没有就去官网(https://download.qt.io/archive/qt/ )下载对应版本的源码包,下载解压
如:
在源码目录里面找到mysql的驱动源码目录如:
D:\QT\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql
2.2 打开工程文件mysql.pro工程文件,修改其内容:
注释掉QMAKE_USE += mysql;
在最后添加已下内容:
(解释:INCLUDEPATH表示编译时需要增加的头文件的路径,LIBS表示编译时需要添加的库路径及库文件,DESTDIR表示编译后生成文件的目标路径修改了方便查找):
INCLUDEPATH += D:/MySQL/mysql_5.6/include/ (这里的路径根据自己的mysql-5.6.36-win32包路径进行修改,或者已安装的MySQL的安装路径)
LIBS += F:/installware/mysql-5.6.36-win32/lib/libmysql.lib(这个也一样,根据MySQL安装路径下的lib目录,如果是32位的软件就加win32:)
DESTDIR = …/mysql/qsqlmysqlDLL(这个可以选择一个自己找得到的路径)
**注意:**路径不能带有空格!(没有空格直接跳到2.3)
如果是像一下这种路径带有空格又修改不了的:C:\Program Files (x86)\MySQL\MySQL Server 5.6\include
- win+R
- 输入cmd
- 输入mklink/J E:\mysql\mysqlsql5.6 “C:\Program Files\MySQL\MySQL Server 5.6”
//这样就可以避免原安装路径中的空格,前面的地址是你要要链接的新路径(不用自己创建) 后面是你带有空格的路径
链接好路径后,填入新的路径即可。
2.3 修改打开的mysql.pro工程项目中的qsqldriverbase.pri文件
如果是64位的MySQL,将原有的include($ $ shadowed($$PWD)/qtsqldrivers-config.pri)注释掉(就是在最前面加#号),因为原目录下没有qtsqldrivers-config.pri文件只有configuer.pri文件,所以先将其注释掉(备份防止以后需要修改回去),再重新添加include(./configure.pri)
如果是32位的MySQL
改完后去看看自己用的多少位的编译器,使用和MySQL位数一样的编译器,我这里是32位 的MySQL选用32位构建,如果是64位就换成64位的构建。
设置完后点击构建
构建完成只需要去生成路径下面找到生成文件就好啦。
如果生成路径设置成相对路径:DESTDIR = …/mysql/qsqlmysqlDLL就去工程目录下找如:D:\QT\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql\qsqlmysqlDLL
如果是设置的绝对路径就去你设置的路径里面找(没找到就去设置对应的磁盘里面搜索qsqlmysql.dllw文件,可能在如:D:\plugins\sqldrivers里面)
32位生成的文件:
64位生成的文件:
把这几个文件拷贝到你QT安装目录下的sqldrivers目录下如:D:\QT\5.14.2\mingw73_32\plugins\sqldrivers
(我就拷贝了这两个,我32位的)
然后再把MySQL安装目录(如:D:\MySQL\mysql_5.6\lib)下的libmysql.dll库文件拷贝到对应编译器位数 的bin目录下(如:D:\QT\5.14.2\mingw73_32\bin或D:\QT\5.14.2\Tools\mingw530_32\bin)
到这运行程序打印出可用驱动就多了个“MYSQL”
在这里插入代码片
qDebug()<< QSqlDatabase::drivers();//返回所有可用数据库驱动程序的列表,查看有哪些驱动可用
到这驱动就编译完成了。