Qt6.9.1手动编译mysql驱动
手搓驱动记(并非手搓,雾
省流版
环境
- Qt 6.9.1
- MySQL 8.0.12
- CMake 4.0.3
- win11 MinGW 13.1.0 64-bit(就Qt自带的那玩意)
先定义几个目录:
- 已完成编译的qt目录:
D:\code\Qt\6.9.1\mingw_64\plugins\sqldrivers
- Qt源代码:
D:\code\Qt\6.9.1\Src\qtbase\src\plugins\sqldrivers
- MySQL本体:
D:\phpstudy_pro\Extensions\MySQL8.0.12
注意你应该把这些目录都换成你的
形如:
...\Qt\6.9.1\mingw_64\plugins\sqldrivers
...\Qt\6.9.1\Src\qtbase\src\plugins\sqldrivers
...\MySQL8.0.12
构建
第一步
进入D:\code\Qt\6.9.1\Src\qtbase\src\plugins\sqldrivers
,修改.cmake.conf
:
在末尾添加:
1 | set(feature_sql_mysql ON) |
注意:
1.换成你的目录。
2.路径符号可以用/与\,但如果用\时,需要两个\,因为需要转义。
3.若你的数据库没有include或lib文件夹,或者你没装MySQL,你应该去官网下载对应的包。具体看这里。
第二步
同目录,修改CMakeLists.txt
:
找到
1 | if(QT_FEATURE_sql_mysql) |
把它改成这玩意儿:
1 | if(QT_FEATURE_sql_mysql) |
第三步
同目录,找到configure.cmake
末尾添加set(QT_FEATURE_sql_mysql ON CACHE BOOL "Enable MySQL support" FORCE)
最后一步
打开qt自带的命令行工具(win搜索栏搜mingw,选Qt 6.9.1 (MinGW 13.1.0 64-bit)
依次输入:
1 | cd D:\code\Qt\6.9.1\Src\qtbase\src\plugins\sqldrivers |
注意:
- 换成你的目录。
- 顺序不能反。
至此完成编译。
使用
需要两个文件,分别是驱动文件qsqlmysql.dll和数据库依赖文件libmysql.dll,分别需要从构建文件夹和数据库的库文件目录中获取(走省流版的可以忽略获取这一步)。
驱动文件要放在Qt的SQL插件目录(...\Qt\6.9.1\mingw_64\plugins\sqldrivers
)下,数据库依赖文件要放在Qt生成的需要用MySQL的程序的目录下。
具体方法如下:
进入构建文件夹
D:\code\Qt\6.9.1\Src\qtbase\src\plugins\sqldrivers\build\plugins\sqldrivers
把其中的qsqlmysql.dll
复制到D:\code\Qt\6.9.1\mingw_64\plugins\sqldrivers
再进入数据库的库文件目录
D:\phpstudy_pro\Extensions\MySQL8.0.12\lib
把其中的libmysql.dll
复制到D:\code\Qt\6.9.1\mingw_64\plugins\sqldrivers
备用,其中的libmysql.dll是所需的依赖文件。最后再把libmysql.dll复制到你要用MySQL的Qt应用程序目录下就可以了。
先读一下上面的使用方法,我这里直接准备成品了:点我下载(要求Qt6.9.1&&MySQL 8.0.12)
原理解释
第一步:添加库文件目录,让CMake知道要去哪儿找要用的MySQL库。
第二步:添加依赖检测,确定要用到的MySQL库是存在的。
第三步:强制启用Qt的MySQL驱动,确保MySQL驱动一定会被编译(你看输出文件夹不是有其他种类数据库的驱动吗,我试的时候好几次只有两种数据库被编译,没有MySQL,算是一个大坑)。
最后一步:进入驱动源代码集群的目录,用CMake构建,并且强制指定数据库的目录,还是为了保证能找到库(其实有些多余了,算是防御性编程)。
使用:这个不用解释,反正Qt搞出来的程序只要开了MySQL就需要libmysql.dll,毕竟是依赖。
另:是Qt生成的Qt程序需要libmysql.dll库在同一目录,而qsqlmysql.dll驱动并不需要与libmysql.dll库在同一目录。
其他
如何在官网下载所需文件
- 去MySQL官网。
- 选择Archives
- 选择版本和平台
- 下载 Windows (x86, 64-bit), ZIP Archive即可
顺带一提,这玩意解压即用(甚至不用安装)如果没有装的话可以顺手装一下。当然这里我们只需要里面的include和lib文件夹就是了
后记
我整了一晚上才摸出来这个方法,踩了好多坑,就很离谱。
可能是我太蔡了hhh