编译mysql动态链接库解决QMYSQL driver not loaded问题

本文详述了在64位Windows 7系统下,使用64位Qt编译适用于MySQL的qsqlmysql.dll与qsqlmysqld.dll动态链接库的全过程。包括安装MySQL,设置环境变量,修改mysql.pro文件,以及复制编译后的动态库到Qt目录的具体步骤。

qt初次开发mysql时,常会碰到QSqlDatabase: QMYSQL driver not loaded问题
原因是qt缺失qsqlmysql.dll 与qsqlmysqld.dll,解决方案是
通过源码编译出qsqlmysql.dll 与qsqlmysqld.dll

以下为64win7下用64位qt编译64位mysql动态链接库

一、安装mysql
mysql源码位于
你的qt安装目录\你的qt版本号\Src\qtbase\src\plugins\sqldrivers\mysql
一、安装mysql
1、官网下载:https://dev.mysql.com/downloads/file/?id=494993
mysql-8.0.20-winx64.zip
2、解压压缩包至C:/mysql
3、设置MYSQL_HOME环境变量
3.1MYSQL_HOME
计算机-》右键-》高级系统设置-》环境变量-》系统变量-》新建
在对话框中
变量名:MYSQL_HOME
变量值:C:\mysql\mysql-8.0.20-winx64
确定
3,2PATH
系统变量->Path->编辑
在变量名最前端:输入%MYSQL_HOME%%;
重启主机

二、编译qsqlmysql.dll 与qsqlmysqld.dll
1、找到mysql源码并用qt打开他
qt安装目录\当前qt版本号\Src\qtbase\src\plugins\sqldrivers\mysql
2、编辑mysql.pro文件
于文件下方添加如下三行
LIBS += $$(MYSQL_HOME)/lib/libmysql.lib
INCLUDEPATH += $$(MYSQL_HOME)/include
DEPENDPATH += $$(MYSQL_HOME)/include
3、项目->重构->Ctrl+b(编译)
4、找到编译后的文件
qt安装目录\当前qt版本号\Src\qtbase\src\plugins\sqldrivers\plugins\sqldrivers
找到刚刚编译出的4个文件
libqsqlmysql.a
libqsqlmysqld.a
qsqlmysql.dll
qsqlmysqld.dll

5、将qsqlmysql.dll与qsqlmysqld.dll复制添加到qt中
qt安装目录\当前qt版本号\mingw73_64\plugins\sqldrivers
6、重启qt

<think> 我们正在解决Qt连接MySQL时出现“QMYSQL driver not loaded”错误的问题。根据引用内容,这个问题通常是由于Qt没有正确加载MySQL驱动造成的。下面将结合引用信息和常规解决方法,提供详细的解决步骤。 关键点: 1. 确保已编译并安装了QtMySQL驱动插件(libqsqlmysql.so或.dll)。 2. 确保MySQL的客户端库(libmysqlclient.so或.dll)可用,并且与Qt驱动插件的架构(32/64位)一致。 3. 确保Qt在运行时能够找到驱动插件和MySQL客户端库。 根据引用[1]和[2]:出现该错误是因为Qt没有正确加载MySQL驱动。引用[3][4][5]则提供了一些具体的解决步骤,特别是关于驱动文件的放置位置和依赖库的版本匹配。 以下是针对Linux系统的解决方法(Windows方法类似,但重点在Linux): </think> ### 解决Qt连接MySQL时出现"QMYSQL driver not loaded"错误的方法 该错误通常由驱动缺失或配置问题导致,以下是系统化的解决方案: #### 方法1:检查驱动可用性 ```cpp #include <QDebug> #include <QSqlDatabase> qDebug() << "可用驱动:" << QSqlDatabase::drivers(); ``` 若输出不含`QMYSQL`,说明驱动未安装[^1][^2]。 #### 方法2:编译安装MySQL驱动(Linux) 1. **安装依赖**: ```bash # Ubuntu/Debian sudo apt install libmysqlclient-dev qtbase5-dev ``` 2. **编译驱动**: ```bash cd /path/to/Qt/Src/qtbase/src/plugins/sqldrivers qmake -- MYSQL_PREFIX=/usr/include/mysql \ "INCLUDEPATH+=/usr/include/mysql" \ "LIBS+=-L/usr/lib/x86_64-linux-gnu -lmysqlclient" make && sudo make install ``` 编译后的`libqsqlmysql.so`将输出到`Qt/plugins/sqldrivers/`目录[^1][^3]。 #### 方法3:配置运行时路径(关键步骤) 1. **添加插件路径**: ```cpp QCoreApplication::addLibraryPath("/path/to/qt/plugins"); ``` 2. **检查依赖关系**: ```bash ldd /path/to/libqsqlmysql.so | grep mysql ``` 确保输出包含`libmysqlclient.so`的有效路径[^2][^4]。 #### 方法4:Windows系统特殊处理 1.MySQL的`libmysql.dll`复制到: - Qt的`bin`目录(如`C:\Qt\5.15.2\mingw81_64\bin`) - 应用程序输出目录 2. 确认Qt插件目录(如`plugins\sqldrivers`)包含`qsqlmysql.dll`[^4][^5]。 #### 方法5:架构一致性检查 1. 确认三者一致: - Qt编译架构(32/64位) - MySQL客户端库架构 - 应用程序目标架构 使用`file`命令验证: ```bash file libqsqlmysql.so # 应显示ELF 64-bit file /usr/lib/libmysqlclient.so # 需匹配 ``` #### 错误排查流程图 ```mermaid graph TD A[QMYSQL driver not loaded] --> B{驱动是否在列表} B --> |否| C[重新编译驱动] B --> |是| D{依赖库是否完整} D --> |否| E[配置LD_LIBRARY_PATH] D --> |是| F{插件路径是否正确} F --> |否| G[addLibraryPath指定路径] F --> |是| H[检查架构一致性] ``` > **典型错误解决**:若出现`undefined symbol: mysql_init`错误,通常因MySQL头文件版本与库不匹配,需重新安装`libmysqlclient-dev`并清理Qt驱动编译缓存[^3][^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值