Qt动态加载MySQL驱动失败:部署应用遇驱动未加载问题求助
针对Qt部署MySQL驱动“Driver not loaded”问题的额外排查建议
我之前部署Qt MySQL应用时也踩过完全一样的坑,你已经试过的方法我也都折腾过,给你几个没提到的排查方向,说不定能解决:
- 严格匹配版本与架构:不光要检查32/64位一致,还要确保
qsqlmysql.dll编译时依赖的MySQL版本和你部署用的libmysql.dll版本完全兼容。比如Qt 5.x编译时用的是MySQL 5.7,那部署就别用MySQL 8.0的libmysql.dll,两者的加密协议和接口有差异,很容易导致加载失败。 - 确认驱动文件的放置路径:Qt数据库驱动必须放在exe同级的
sqldrivers子目录里,比如你的程序是app.exe,那路径得是./sqldrivers/qsqlmysql.dll,不能直接把驱动丢在exe根目录,也不能放在其他自定义子目录里,Qt默认只会在这个路径找数据库驱动。 - 检查
libmysql.dll的深层依赖:libmysql.dll本身也有依赖(比如MySQL 8.0+需要libcrypto-*.dll、libssl-*.dll这些),你可以用Windows自带的dumpbin /dependents libmysql.dll命令(需要安装VS的工具集)查看它的所有依赖项,把这些缺失的DLL也一并复制到exe目录下。 - 输出详细错误日志:在你的代码里加几行调试代码,把驱动加载的详细错误打出来:
把带这个调试输出的程序放到目标机运行,有时候“Driver not loaded”只是表面,日志会告诉你具体是依赖缺失还是版本不匹配。#include <QDebug> #include <QSqlDatabase> #include <QSqlError> // 在初始化数据库前添加 qDebug() << "Available drivers:" << QSqlDatabase::drivers(); QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); if (!db.isValid()) { qDebug() << "Driver error:" << db.lastError().text(); } - 尝试安装MySQL Connector/C:如果上面的方法都不行,直接在目标机安装对应版本的MySQL Connector/C,它会把所有必要的运行库注册到系统路径里,避免手动复制DLL时遗漏依赖。
内容的提问来源于stack exchange,提问作者mekkanizer
相关产品推荐
相关产品推荐

