手搓驱动记(并非手搓,雾

省流版

点这里

环境

  1. Qt 6.9.1
  2. MySQL 8.0.12
  3. CMake 4.0.3
  4. win11 MinGW 13.1.0 64-bit(就Qt自带的那玩意)

先定义几个目录:

  1. 已完成编译的qt目录:D:\code\Qt\6.9.1\mingw_64\plugins\sqldrivers
  2. Qt源代码:D:\code\Qt\6.9.1\Src\qtbase\src\plugins\sqldrivers
  3. MySQL本体:D:\phpstudy_pro\Extensions\MySQL8.0.12
    注意你应该把这些目录都换成你的

形如:

  1. ...\Qt\6.9.1\mingw_64\plugins\sqldrivers
  2. ...\Qt\6.9.1\Src\qtbase\src\plugins\sqldrivers
  3. ...\MySQL8.0.12

构建

第一步

进入D:\code\Qt\6.9.1\Src\qtbase\src\plugins\sqldrivers修改.cmake.conf

在末尾添加

1
2
3
set(feature_sql_mysql ON)
set(MySQL_INCLUDE_DIR "D:\\phpstudy_pro\\Extensions\\MySQL8.0.12\\include")
set(MySQL_LIBRARY "D:\\phpstudy_pro\\Extensions\\MySQL8.0.12\\lib\\libmysql.lib")

注意:
1.换成你的目录。
2.路径符号可以用/与\,但如果用\时,需要两个\,因为需要转义。
3.若你的数据库没有include或lib文件夹,或者你没装MySQL,你应该去官网下载对应的包。具体看这里

第二步

同目录,修改CMakeLists.txt:
找到

1
2
3
if(QT_FEATURE_sql_mysql)
add_subdirectory(mysql)
endif()

把它改成这玩意儿:

1
2
3
4
if(QT_FEATURE_sql_mysql)
find_package(MySQL REQUIRED) # 添加依赖检测
add_subdirectory(mysql)
endif()

第三步

同目录,找到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
2
3
4
5
cd D:\code\Qt\6.9.1\Src\qtbase\src\plugins\sqldrivers

cmake -B build -GNinja -DMySQL_ROOT="D:\\phpstudy_pro\\Extensions\\MySQL8.0.12"

cmake --build build

注意:

  1. 换成你的目录
  2. 顺序不能反

至此完成编译。

使用

需要两个文件,分别是驱动文件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库在同一目录。

其他

如何在官网下载所需文件

  1. MySQL官网
  2. 选择Archives
  3. 选择版本和平台
  4. 下载 Windows (x86, 64-bit), ZIP Archive即可
    顺带一提,这玩意解压即用(甚至不用安装)如果没有装的话可以顺手装一下。当然这里我们只需要里面的include和lib文件夹就是了

后记

我整了一晚上才摸出来这个方法,踩了好多坑,就很离谱。
可能是我太蔡了hhh

参考:https://www.mlxkj.xyz/index.php/archives/133/