qt32 mysql驱动为例,数据库驱动模块的编译
环境
-
qt版本5.14.0。
-
具体步骤以qt文档为主,网络博客参考为辅。
-
编译器的位数和mysql的位数必须一致,因为mysql源码采用两种位数来写,所以为演示32位,在此采用编译器为msvc32,mysql源码为mysql-connector-c-6.1.11-win32.zip;
-
其中msvc32不能使用qt中阉割过的编译器,其中没有nmake工具,qt平台采用的是qmake。所以需要单独下载msvc32,可以安装微软vs来。
-
mysql源码下载地址MySQL :: Download MySQL Connector/C (Archived Versions)。源码必须使用connector c,不能是c++等,这些由qt助手文档得来。但我也尝试过了mysql8安装下来的server,c++等,可能是位数问题,皆未成功。不过应该只要位数解决,也能成功。只要含有所需文件:
-
<MySQL dir>/lib/libmysql.lib <MySQL dir>/lib/libmysql.dll <MySQL dir>/include/mysql.h
部分源码文件修改
-
Qt\Qt5.14.1\5.14.1\Src\qtbase\src\plugins\sqldrivers中的qsqldriverbase.pri
-
QT = core core-private sql-private # For QMAKE_USE in the parent projects. #include($$shadowed($$PWD)/qtsqldrivers-config.pri)//删除这个 include(./configure.pri)#增加这个 PLUGIN_TYPE = sqldrivers load(qt_plugin) DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII
-
Qt\Qt5.14.1\5.14.1\Src\qtbase\src\plugins\sqldrivers\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) #32bit,此位置是我解压下载的mysql32 zip文件之后所得,libs必须将文件带上,不能只写成目录。 INCLUDEPATH += "D:\MySQL\mysql-connector-c-6.1.10-win32\include" LIBS += "D:\MySQL\mysql-connector-c-6.1.10-win32\lib\libmysql.lib" DESTDIR = ../mysql/mysqlDll
命令执行
打开“VS 2017的开发人员命令提示符“的cmd,里面配置有这个编译器的环境,可以直接用nmake,然后步骤如下:
cd D:\Applications\Qt\5.14.1\Src\qtbase\src\plugins\sqldrivers\mysql
D:\Applications\Qt\5.14.1\msvc2017\bin\qmake.exe -- MYSQL_INCDIR="D:\MySQL\mysql-connector-c-6.1.10-win32/include" MYSQL_LIBDIR="D:\MySQL\mysql-connector-c-6.1.10-win32/lib/libmysql.lib"
nmake
nmake install
最后将D:\MySQL\mysql-connector-c-6.1.10-win32/lib/libmysql.dll文件拷贝到D:\Applications\Qt\5.14.1\msvc2017\bin目录下即完成。
所见问题及参考
Project ERROR: msvc-version.conf loaded but QMAKE_MSC_VER isn’t set