QT编译MySQL插件,解决“QMYSQL driver not loaded“问题

本文介绍如何在Qt5.14.2环境下为MySQL编译驱动程序插件,解决因高版本Qt不再自带MySQL插件导致的问题。通过具体步骤演示如何配置、编译并安装MySQL驱动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

目录

前言

编译前的准备工作

下载MySQL

编译MYSQL驱动程序插件

编译运行程序

结论


 

前言


之前有一个QT写的程序需要与MySQL进行交互,该程序最早是在QT5.9.7中编写的,当时关于数据库访问方面没怎么费心,后来别人在用QT5.12.9和QT5.14.2进行编译运行时发现都能编译,就是没有办法运行。当前在Win10上安装的QT5.14.2,安装目录为:C:\Qt\Qt5.14.2,在安装环境是选择了“mingw73_32”、“msvc2015_64”两套编译环境和安装时带上源码,平常使用mingw73_32环境进行编译运行和调试。
在Log4qt中记录的下如下错误信息:

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7
Open datatabase error: "Driver not loaded Driver not loaded"
SqlError("", "Driver not loaded", "Driver not loaded")


经从网上查找资料是发现在较高版本的QT中不再自带MySQL插件,这一点可以从两个方面得到验证,一是在编译环境目录C:\Qt\Qt5.14.2\5.14.2\mingw73_32\plugins\sqldrivers下找不到MySQL相关的dll库,第二也可以用QSqlDatabase::Drivers()方法返回的QStringList,输出这个StringList可以看到也没有MySQL。


编译前的准备工作


在QT的帮助文档中可以看到如何编译数据库驱动程序插件的帮助,这个HTML页面的名称为sql-driver.html,在本地上的物理位置为C:\Qt\Qt5.14.2\Docs\Qt-5.14.2\qtsql\sql-driver.html,里面有比较详尽的说明,本文就是按照此说明结合实际情况来记录编译过程(考虑到本项目实际情况,部署的平台可能有x86和x64两种情况,为图省事就针对x86平台进行编译)。
编译情况说明:
QT版本:Qt5.14.2
编译套件:mingw73_32
QT安装根目录:C:\Qt\Qt5.14.2
另外需要注意的是安装QT时勾选源代码项,这样一样数据库相关的驱动源代码路径在:C:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers
在编译开始之前,还需要准备相应MySQL客户端程序,因为本次是用32位环境编译,所以准备的是32位的(如果使用msvc2015_64或mingw73_64之类的平台,则需要准备64位的)。
首先从命令行进入到数据库插件的源代码目录C:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers,因为是使用mingw73_32这个编译环境,所以要从mingw73_32的命令行进入,如下图所示:

 

 
然后切换到C:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers目录,执行命令:

cd C:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers


再执行命令qmake -version查看qmake的版本,最终执行如下命令(这一步实际操作时可免去,当时只为验证猜想而已,D:/VS2015Project/SCDSolution/Output/database目录下是一个免安装版的x64版的MySQL):

qmake -- MYSQL_INCDIR="D:/VS2015Project/SCDSolution/Output/database/include" MYSQL_LIBDIR="D:/VS2015Project/SCDSolution/Output/database/lib"


执行后的输出如下:

Setting up environment for Qt usage...

C:\Qt\Qt5.14.2\5.14.2\mingw73_32>cd C:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers

C:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers>qmake -version
QMake version 3.1
Using Qt version 5.14.2 in C:/Qt/Qt5.14.2/5.14.2/mingw73_32/lib

C:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers>qmake -- MYSQL_INCDIR="D:/VS2015Project/SCDSolution/Output/database/include" MYSQL_LIBDIR="D:/VS2015Project/SCDSolution/Output/database/lib"
Info: creating stash file C:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\.qmake.stash

Running configuration tests...
Checking for DB2 (IBM)... no
Checking for InterBase... no
Checking for MySQL... no
Checking for OCI (Oracle)... no
Checking for ODBC... yes
Checking for PostgreSQL... no
Checking for SQLite (version 2)... no
Checking for TDS (Sybase)... no
Done running configuration tests.

Configure summary:

Qt Sql Drivers:
  DB2 (IBM) .............................. no
  InterBase .............................. no
  MySql .................................. no
  OCI (Oracle) ........................... no
  ODBC ................................... yes
  PostgreSQL ............................. no
  SQLite2 ................................ no
  SQLite ................................. yes
    Using system provided SQLite ......... no
  TDS (Sybase) ........................... no

Qt is now configured for building. Just run 'mingw32-make'.
Once everything is built, you must run 'mingw32-make install'.
Qt will be installed into 'C:\Qt\Qt5.14.2\5.14.2\mingw73_32'.

Prior to reconfiguration, make sure you remove any leftovers from
the previous build.


上述命令中MYSQL_INCDIR和MYSQL_LIBDIR两个参数的值是我当前电脑上一个免安装版MySQL5.7_x64的include和lib目录的全路径,因为编译套件mingw73_32是32位的,而MySQL是64的,所以并没有找到MySQL的信息(主要是想偷懒,因为32位的MySQL很少见),因为两个平台不一致,所以只好再去找32位的MySQL了。


下载MySQL


简单起见可以直接下载32位的MySQL压缩包,而不要下载msi安装包,这样对于仅仅满足编译需要来说省事些。下载链接地址为:https://downloads.mysql.com/archives/community/
在这里根据需要下载相应的版本,因为本项目服务器端MySQL版本为MySQL5.7.32,因此这里也下载对应版本,如下图所示:


将下载的zip压缩包解压到D:\ProjectStory\目录下,mysql-5.7.32-win32的路径为D:\ProjectStory\mysql-5.7.32-win32。


编译MYSQL驱动程序插件


因为在上次的qmake中代码架构不一致,所以需要删除C:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers目录下的config.cache文件(否则依然提示找不到MySQL驱动),在删除config.cache文件后,在此运行命令:

qmake -- MYSQL_INCDIR="D:/ProjectStory/mysql-5.7.32-win32/include" MYSQL_LIBDIR="D:/ProjectStory/mysql-5.7.32-win32/lib"


输出如下:

C:\Qt\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers>qmake -- MYSQL_INCDIR="D:/ProjectStory/mysql-5.7.32-win32/include" MYSQL_LIBDIR="D:/ProjectStory/mysql-5.7.32-win32/lib"

 

Running configuration tests...
Checking for DB2 (IBM)... no
Checking for InterBase... no
Checking for MySQL... yes
Checking for OCI (Oracle)... no
Checking for ODBC... yes
Checking for PostgreSQL... no
Checking for SQLite (version 2)... no
Checking for TDS (Sybase)... no
Done running configuration tests.

Configure summary:

Qt Sql Drivers:
  DB2 (IBM) .............................. no
  InterBase .............................. no
  MySql .................................. yes
  OCI (Oracle) ........................... no
  ODBC ................................... yes
  PostgreSQL ............................. no
  SQLite2 ................................ no
  SQLite ................................. yes
    Using system provided SQLite ......... no
  TDS (Sybase) ........................... no

Qt is now configured for building. Just run 'mingw32-make'.
Once everything is built, you must run 'mingw32-make install'.
Qt will be installed into 'C:\Qt\Qt5.14.2\5.14.2\mingw73_32'.

Prior to reconfiguration, make sure you remove any leftovers from
the previous build.


至此,可以继续下一步,进行MySQL数据库驱动程序插件代码的编译和安装操作了。
接着在当前目录运行mingw32-make进行编译,编译完毕之后再执行mingw32-make install进行安装,至此完成了QT下MySQL驱动程序插件的安装,打开mingw73_32编译环境下的驱动程序插件存放目录C:\Qt\Qt5.14.2\5.14.2\mingw73_32\plugins\sqldrivers,会发现生成了6个文件,分别是:
 

qsqlite.dll
qsqlite.dll.debug
qsqlmysql.dll
qsqlmysql.dll.debug
qsqlodbc.dll
qsqlodbc.dll.debug


编译运行程序


上面的操作只是完成了mingw73_32编译环境下的驱动程序插件的编译,但是如果就此运行项目,会得到下面的输出:

section .gnu_debuglink not found in C:\Qt\Qt5.14.2\5.14.2\mingw73_32\plugins\sqldrivers\qsqlmysql.dll.debug
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
Open datatabase error: "Driver not loaded Driver not loaded"


从上面的输出中可以看到"available drivers"这部分输出较之前有变化,原来是"QSQLITE QODBC QODBC3 QPSQL QPSQL7",现在是"QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7",不过依然提示"QMYSQL driver not loaded",想想我们之前编译的时候用到了MySQL的lib目录,即D:/ProjectStory/mysql-5.7.32-win32/lib,于是将该目录下的libmysql.dll、libmysql.lib、libmysqld.dll、libmysqld.lib复制到程序生成目录下,再次运行程序,这次成功了!
如果需要将程序作为安装包单独发布而不是使用QTCreator来运行,还需要将编译生成的MySQL驱动程序插件一起提供,即与可执行文件放在同一目录下。


结论


1、在QT5.12等版本中不再自带MySQL数据库驱动程序插件,需要自行提供,可以提前准备好或参考类似于本文的方式自行编译。
2、编译好MySQL驱动程序插件后可以使用QTCreator方式调试运行,但是单独发布时需要随程序文件一起提供(即与生成exe文件放在一起)。
3、单独的MySQL驱动程序插件并不能工作,需要与MySQL提供的动态链接库放在一个目录下(即与生成exe文件放在一起)。
4、在正式发布时,因为发布的是release版本,因此可以不提供debug版本的MySQL驱动程序和MYSQL驱动程序插件,即只需提供qsqlmysql.dll、libmysql.dll即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周公

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值