用tdm编译64bit qt版本的mysql驱动

来源:互联网 发布:php url补全函数 编辑:程序博客网 时间:2024/05/29 19:13

官网只提供了32位的mingw编译的qt版本,经测试可以直接已经有mysql驱动,并可执行事务.
但是我是用了自己编译的tdm-gcc 64位版本的qt,就没这个福利了.

主要是根据下文提及步骤进行操作
http://1029975378-qq-com.iteye.com/blog/1310910
http://blog.sina.com.cn/s/blog_74a7e56e01017s64.html

===============第一步===============
第一步主要是生成def文件和准备mysql编译所需的头文件
去mysql官网下载zip安装包(64bit版本的,5.6.26是349.4M):
http://dev.mysql.com/downloads/mysql/
解压缩,从以下路径复制lib文件到E:\Coding\QT\SourceCode\mysql_svr\x64\lib\文件夹
mysql-5.6.26-winx64\lib\libmysql.lib
同时从解压缩文件中复制include文件到E:\Coding\QT\SourceCode\mysql_svr\x64\include\文件夹
接下来需要用reimp提取的libmysql.lib生成libmysql.def文件,reimp只有32bit的,但是也可以用来处理64bit的lib文件,
进入E:\Coding\QT\SourceCode\mysql_svr\x64\lib\文件夹,执行如下命令:
C:\Qt\Qt5.5.0\Tools\mingw492_32\bin\reimp -d  libmysql.lib

*************************************************************************************
**  插一句
**  下面的mysql的源码中也可以找到找到libmysql.def文件,源码下载路径(5.6.26是39.6M):
**  http://dev.mysql.com/downloads/mysql/
**  下载的是个zip文件,解压缩,路径如下
**  mysql-5.6.26\libmysql\libmysql.def
**  经过我实际操作,用源码中的def文件生成的驱动不支持事务操作.
**  另外,由于最新的mysql都是用cmake配置工程,
**  所以用下文中提到方法可能可以直接利用qt编译mysql源码,但我未做尝试
**  http://www.2cto.com/kf/201401/272101.html
*************************************************************************************


===============第二步===============
由第一步取得的libmysql.def生成libmysql.a文件
C:\TDM-GCC-64\bin\dlltool -k -d libmysql.def -l libmysql.a

然后进入以下qt源代码目录(以下操作的前提是,之前已经用configure命令配置tdm-gcc-64来编译整个qt代码,因为会涉及到许多其他配置文件)
E:\Coding\QT\SourceCode\qt-everywhere-opensource-src-5.5.0\qtbase\src\plugins\sqldrivers\mysql
修改其中的mysql.pro文件,在开头插入lib和include信息,修改后文件大概如下

***************************
TARGET = qsqlmysql

LIBS        *= "E:\Coding\QT\SourceCode\mysql_svr\x64\lib\libmysql.a"
INCLUDEPATH *= "E:\Coding\QT\SourceCode\mysql_svr\x64\include"

SOURCES = main.cpp
OTHER_FILES += mysql.json
include(../../../sql/drivers/mysql/qsql_mysql.pri)

PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
***************************
用qmake由pro文件生成makefile,命令如下:
C:\Qt\Qt5.5.0\5.5\tdm510_shared\bin\qmake -o Makefile mysql.pro
生成qt的mysql驱动文件,命令如下:
C:\TDM-GCC-64\bin\mingw32-make
生成的文件(qsqlmysql.dll, qsqlmysqld.dll)在以下目录
E:\Coding\QT\SourceCode\qt-everywhere-opensource-src-5.5.0\qtbase\plugins\sqldrivers


===============第三步===============
复制生成的2个文件(qsqlmysql.dll, qsqlmysqld.dll)到对应的qt的以下路径
C:\Qt\Qt5.5.0\5.5\tdm510_shared\plugins\sqldrivers


===============第四步===============
最后编译运行自己程序仍然可能出现下面的错误
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QODBC3 QODBC QSQLITE QMYSQL QMYSQL3
需要用到第一步下载的mysql zip解压缩包的以下文件
mysql-5.6.26-winx64\lib\libmysql.dll
复制libmysql.dll到qt的bin文件夹下,我机器是下面路径
C:\Qt\Qt5.5.0\5.5\tdm510_shared\bin


OK,至此可以使用qt来连接mysql数据库了

===================================

0 0