Qt5.12.4编译MySQL驱动备忘
背景
Qt5.12.4发布,本想不去理会,但changelog中提到 QFile::copy() 的一处bug,恰是当前一个小项目上用到的,虽然也可以想办法规避,但犹豫了一下,还是跟风安装了新版,安装完成后,才发现Qt5.12.4中并没有默认自带 qsqlmysql.dll ,这可叫我头大了,Qt5.12.3时期尝试过自己编译这个驱动,然而并没有成功。现在想要用它,就不得不搞了也…
源码下载
先把源码下载位置留出来:
第一次尝试
以前编译mysql驱动的时候,都是直接从源码中将sqldrivers路径解压出来用
.\qtbase-everywhere-src-5.12.4\src\plugins\sqldrivers
这次还是先这样试着,各种错误就不提了,反正失败了。记得上次Qt5.12.3也是卡在这里。
第二次尝试
将上述源码完整解压到某路径,比如
D:\qtbase-everywhere-src-5.12.4
进入sqldrivers路径
D:\qtbase-everywhere-src-5.12.4\src\plugins\sqldrivers
这里需要做两处编辑
- 修改.\qsqldriverbase.rpi
QT = core core-private sql-private
# For QMAKE_USE in the parent projects.
#include($$shadowed($$PWD)/qtsqldrivers-config.pri)
include($$shadowed($$PWD)/configure.pri)
PLUGIN_TYPE = sqldrivers
load(qt_plugin)
DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII
- 修改.\mysql\mysql.pro
TARGET = qsqlmysql
HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp
#QMAKE_USE += mysql
OTHER_FILES += mysql.json
PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
win32:LIBS += -LD:/Programs/MySQL/mysql-5.7.26-win32/lib -llibmysql
INCLUDEPATH += D:/Programs/MySQL/mysql-5.7.26-win32/include
DEPENDPATH += D:/Programs/MySQL/mysql-5.7.26-win32/include
注释掉 QMAKE_USE += mysql 并且新增mysql库的路径。
- 启动命令行
Qt 5.12.4 (MinGW 7.3.0 32-bit)
这里编译的是32位版本,因此要启动32位对应的命令行,前面mysql.pro中的库路径也要是32位mysql的库路径。如果是编译64位版本,启动对应的命令行,修改mysql.pro中的库路径,做好对应。
在命令行中依次执行:
cd D:\qtbase-everywhere-src-5.12.4\src\plugins\sqldrivers\mysql
qmake
mingw32-make -j8
mingw32-make install
至此结束
备注
使用的MySQL版本是5.7.26,发现其32位版本的libmysql.dll还要依赖32位的msvcr120.dll和msvcp120.dll。如果后期打包的程序中不包含这两个dll或者系统中未注册这两个dll,都可能会导致出现:
QMYSQL driver not loaded