先吐个槽,弄了将近一天的时间才弄好,其实大概在一年之前弄个,不过当时没记录下来,导致现在又得再做一遍,可见博客是多么的重要啊!花了这么多时间主要是因为想从源码编译,大家都知道,编译一个Qt源码真心不容易啊,好久不能关电脑!!!好了,吐完了,说正事!
最近最项目,选择了Qt和MySQL组合。之前一直在linux下做事,可惜这次要求环境是Windows,所以得重新搭建环境。首先安装Qt的开发环境,我直接选择的QtSDK,一个包安装到底就行;MySQL也是官网下载最新安装包安装的。两个部分单独测试过,都已经正常工作了!接下来就需要Qt操作MySQL了,这需要MySQL数据库驱动,QtSDK安装后只是自带了SQLite数据库的驱动,需要自己编译。我选择的编译工具是大名鼎鼎的MinGW,然后需要Qt源码包,我选择的版本是4.7.4。
接下来就是编译了,感觉无从下手的时候最好就看看Qt的帮助文档,至于怎么使用Qt的帮助文档,可以看看上一篇博文,这里贴一下在帮助文档中搜索到的结果:
这篇帮助文档里面非常详细的介绍了如何编译各种数据库的驱动,我们这里选择在Windows下编译MySQL数据库驱动。
文档十分详细,基本都是步骤,我就翻译了,直接截图,大家一看就知道:
How to build the MySQL driver for MinGW users
The following steps have been used successfully for WinXP SP3. In this example, Qt 4.6.2 is shown.
- Download the following components:
- MinGW-5.1.6.exe
- mingw-utils-0.3.tar.gz
- Qt sources, e.g. qt-everywhere-opensource-src-4.6.2.zip
- mysql-5.1.35-win32.msi
- Install MinGW-5.1.6.exe in, e.g. C:\MinGW.
- Extract mingw-utils-0.3.tar.gz into, e.g. C:\MinGW.
- Add the path for MinGW-5.1.6.exe to your PATH variable, e.g. C:\MinGW\bin;
- Extract the Qt sources, (qt-everywhere-opensource-src-4.6.2.zip), into, e.g. C:\Qt.
- Add the path for the eventual Qt binary to your PATH variable, e.g. C:\Qt\4.6.2\bin;.
- Install MySQL (mysql-5.1.35-win32.msi), customizing the components. Select only the headers and libraries. Install in, e.g. C:\MySQL\MySQL51.
- Open the DOS prompt, go to C:\MySQL\MySQL51\lib\opt, and run the following commands:
- reimp -d libmysql.lib
- dlltool -k -d libmysql.def -l libmysql.a
- Open the DOS prompt, go to C:\Qt\4.6.2 and run the following commands:
- configure.exe -debug-and-release -platform win32-g++ -qt-sql-mysql -l mysql -I C:\MySQL\MySQL51\include -L C:\MySQL\MySQL51\lib\opt
- mingw32-make sub-src
This step takes a long time.
- Open the DOS prompt, go to C:\Qt\4.6.2\src\plugins\sqldrivers\mysql and run the following command:
- qmake "INCLUDEPATH+=C:\MySQL\MySQL51\include" "LIBS+=-L. mysql" mysql.pro
- Now the following libraries are ready in C:\Qt\4.6.2\plugins\sqldrivers.
- libqsqlmysql4.a
- libqsqlmysqld4.a
- qsqlmysql4.dll
- qsqlmysqld4.dll
To use the SDK and QtCreator directly, copy these libraries to your C:\Qt\...\qt\plugins\sqldrivers\, and copyC:\MySQL\MySQL51\lib\opt\libmysql.dll to your C:\Qt\...\qt\bin\.
这里我贴一下自己编译完成后的文件,熟话说:有图有真相,呵呵!
将生成的文件按照帮助文档说的,拷贝到相应的目录下;接下来我们在QtCreator里面写一个程序,测试一下我们的驱动是否可用:
程序的功能是输出当前系统中Qt包含的数据库驱动;源码如下:
#include <QApplication>#include <QSqlDatabase>#include <QStringList>#include <QDebug>int main(int argc, char* argv[]) { QApplication app(argc, argv); qDebug() << "Available drivers:"; QStringList drivers = QSqlDatabase::drivers(); foreach(QString driver, drivers) qDebug() << "\t" << driver; QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); qDebug() << "ODBC driver valid?" << db.isValid();}
程序输出结果如下:
由上面输出我们可以看出:Qt自带的SQLite和我们自己编译的MySQL数据库的驱动都可以正常工作了,我们没有编译的ODBC数据库驱动就没有支持!
注意:
为什么这么简单的东西我却花了将近一天的时间呢?这里说一下自己的思路和做法,避免大家走弯路,更让大家熟悉怎么编译Qt模块。
最初我是直接编译Qt源码,没有利用已安装的Qt工具来模块化编译数据库驱动,这出现了两个问题:
1、直接编译,花费很长时间才能编译完;若利用configure配置工具驱动一些模块后会编译报错,哎;
2、这个时候指定MySQL头文件和库文件路劲比较纠结,可能是我对Windows不熟悉了,反正我觉得纠结。
后来我才准备模块化编译的,这个确实比较简单,一会就弄完了,特别要注意上面要利用MinGW工具对MySQL库文件进行转换。
好了,就到这吧!