MYSQL Driver not load解决&QT编译MySQL数据库驱动

文章详细介绍了在QT环境下如何编译64位和32位的MySQL驱动,包括检查sqldrivers目录下的动态库文件,拷贝libmysql.dll到相应目录,以及当文件缺失时如何从源码编译驱动,并修改配置文件,确保驱动与MySQL版本匹配,最后解决QT报错MYSQLDriverNotLoaded的方法。

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

这里写了QT下编译64位的MySQL和32位的MySQL驱动方法,和QT报错:MYSQL Driver not load解决。

(如果直接看驱动的编译请看第二点)

1、首先先看你的Qt安装路径下的sqldrivers目录下是否有qsqlmysql.dllqsqlmysqld.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
在这里插入图片描述

  1. win+R
  2. 输入cmd
  3. 输入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();//返回所有可用数据库驱动程序的列表,查看有哪些驱动可用在这里插入图片描述
到这驱动就编译完成了。

### 解决方案 在 Linux 系统下,使用 Qt5.12 操作 MySQL 数据库时,如果遇到 `QMYSQL driver not loaded` 问题,通常是由于 QtMySQL 驱动未正确编译或链接导致的。以下是详细的解决方法: #### 1. 安装必要的依赖包 确保系统中安装了 MySQL 相关的开发库以及 OpenSSL 库。这些库是编译 Qt MySQL 驱动所必需的。 ```bash sudo apt-get update sudo apt-get install libssl-dev sudo apt-get install mysql-server mysql-client libmysqlclient-dev ``` 上述命令会安装 MySQL 服务端、客户端以及开发库[^2]。 #### 2. 编译 Qt MySQL 驱动 QtMySQL 驱动需要手动编译并安装到 Qt 的插件目录中。以下是具体步骤: - **进入 Qt 源码目录** 假设你已经下载了 Qt5.12 的源码包(例如通过 `qtbase` 模块)。进入以下路径: ```bash cd /path/to/Qt/5.12/Src/qtbase/src/plugins/sqldrivers ``` - **配置构建环境** 使用 `qmake` 工具生成 Makefile 文件,并指定 MySQL 驱动的构建选项。 ```bash /path/to/Qt/5.12/bin/qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-lmysqlclient -lz" mysql.pro ``` 这里的 `/usr/include/mysql` 是 MySQL 开发头文件的路径,`-lmysqlclient` 是链接 MySQL 客户端库的选项[^3]。 - **编译驱动** 执行以下命令完成编译: ```bash make sudo make install ``` 编译完成后,MySQL 驱动会被安装到 Qt 的插件目录中,通常位于 `/path/to/Qt/5.12/plugins/sqldrivers/`。 #### 3. 验证驱动是否加载成功 启动一个简单的 Qt 程序,检查 `QSqlDatabase` 是否能够加载 QMYSQL 驱动。 ```python from PyQt5.QtSql import QSqlDatabase, QSqlDriver db = QSqlDatabase.addDatabase("QMYSQL") if db.isValid(): print("QMYSQL driver loaded successfully.") else: print("Failed to load QMYSQL driver.") ``` 如果驱动加载成功,程序将输出 `QMYSQL driver loaded successfully.`。 #### 4. 常见问题排查 - **驱动未出现在可用驱动列表中** 如果运行 `QSqlDatabase.drivers()` 后仍未看到 QMYSQL,可能是驱动文件未正确安装到 Qt 插件目录中。检查以下路径是否存在 `libqsqlmysql.so` 文件: ``` /path/to/Qt/5.12/plugins/sqldrivers/libqsqlmysql.so ``` - **缺少依赖库** 如果出现类似 `error while loading shared libraries: libmysqlclient.so.20` 的错误,说明系统缺少 MySQL 客户端库。可以通过以下命令修复: ```bash sudo ldconfig -v | grep mysql ``` 如果未找到相关库,重新安装 `libmysqlclient-dev` 并执行 `ldconfig` 更新动态链接库缓存。 --- ### 总结 通过安装必要的依赖库、编译 Qt MySQL 驱动并验证其是否正确加载,可以有效解决 `QMYSQL driver not loaded` 问题。确保所有步骤均按照上述方法操作,以避免遗漏关键步骤。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值