古老的MSYS搭建的开发环境不仅存在一些兼容性问题,而且还很繁琐,幸好mingw-build项目的开发者又做了更进一步的改进,他们开发了MSYS2项目。这个项目不仅兼容性更好,而且引入了包管理机制,可以直接从网上下载相关的软件,并解决相关的依赖性问题。这个项目的主页在 http://sourceforge.net/projects/msys2/
进入项目主页后,根据你的系统选择32
位或者64
位,现在大家使用的系统应该都是64
位的了。下载好base
包,然后解压缩到什么地方,一般我都是解压缩到D
盘的根目录下,然后把bin
目录加入系统PATH
。在MSYS2
根目录下有3
个bat
文件,它们是启动MSYS2
的命令,根据需要启动,如果你不做开发,那么只需要启动msys2_shell.bat
就足够了;如果你需要软件开发,那么就启动mingw64_shell.bat
,它会在MSYS
目录下新建一个mingw64
的目录,里面存放着mingw
编译器及其类库。首次运行时会进行一些系统设定,等到命令提示符出现就完成了,此时需要退出MSYS2
,然后重新进入。在MSYS
窗口左上角点击那个图标,弹出的菜单中有option
,可以设置MSYS2
的一些参数,最主要的就是命令行窗口的大小和使用的字体,我喜欢看大一些的。
MSYS2
使用了pacman
包管理机制,这是从ArchLinux
发行版引入的。在 http://xiexiejiao.cn/linux/pacman-introduce.html有pacman
的具体使用方法。我们首先对系统升级 就会检测整个系统可以升级的组件,并自动下载安装,这种情况下推荐升级完成后重启MSYS2
环境,这样可以让升级过后的库文件发挥作用。如果你觉得默认的服务器下载太慢,也可以使用中科大镜像。在/etc/pacman.d的3个文件中添加对应的信息,为了优先使用中科大镜像,还要把这些信息添加到文件的最前
mirrorlist.msys
- Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MSYS2/$arch
mirrorlist.mingw32
- Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MINGW/i686/
mirrorlist.mingw64
- Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MINGW/x86_64/
然后看一下到底有什么包可以安装。注意那个字母是英文的“l”,而不是数字“1”。里面的包分成3个目录mingw-w32、mingw-w64、msys,注意它们是不能混用的。从开发的角度来讲,mingw的兼容性和性能都是最好的,所以优先使用mingw的包,注意32位和64位不能混用;msys的包主要是帮助bash解释器更完整。也就是说基本原则是开发用的类库和编译器装mingw的,bash脚本的解释器装msys的。 然后安装Qt开发环境
- pacman -Sy mingw-w64-x86_64-qt-creator
pacman
包管理器会自动解析其依赖性,自动安装qt
、mingw
、libpng
……如果中途下载出错了,那就再次运行pacman
命令,下载会继续,下载下来的包保存在/msys64/var/cache/pacman/pkg
目录下,不用重新下载。如果你觉得pacman下载太慢,也可以自己到镜像站点用下载工具下载来以后放到这个目录下。
Qt
在编译和安装时会识别编译目录和安装目录,并写入Qt
的配置文件,不过MSYS2
提供了qtbinpatcher
程序,可以根据你的需求来自动修改Qt
文件使其识别新的目录,这在pacman
包管理器中已经设定好了,qtbinpatcher
会自动下载,也会自动运行。 然后把/msys64/mingw64/bin
和/msys64/mingw64/x86_64-w64-mingw32/bin
目录加入系统PATH
,以便各种程序能够被自动识别。Qt-creator
的可执行文件在/msys/mingw64/bin
make
并非Qt
必须依赖的包,而make
是极重要的,所以- pacman -Sy make mingw-w64-x86_64-make
安装make程序,其中make包是msys的,mingw-w64-x86_64-make包是mingw的,这两个程序本质上是一样的,但是有些软件的安装脚本时候只能识别其中一个,所以还是两个都装上吧。 我一般还会再安装- pacman -Sy p7zip tar wget patch diffutils git
注意不要安装msys
目录下的gcc
,它的运行效率比较低,而且没有更多用于开发的包。基本原则是如果mingw
带了,那就不要安装MSYS
的包。MSYS2
还自带了其他一些可用于开发的包:fftw
可以安装LAPACK
由于使用了官方blas
,所以速度慢,推荐自行编译OpenBLAS
Boost
可以安装nasm
、yasm
可以安装Python
、perl
、ruby
推荐第三方安装。只是python
有些类库是Qt
部分组件所需要的,所以在安装Qt
的时候就已经安装了Python2
,不过这和WinPython
等第三方包不冲突。而perl
是MSYS2
中某些组件不可或缺的基础,所以也已经有了。这些包请酌情根据自己的需要安装 如果你不需要使用更多复杂的功能,到这里就已经足够了,相当的傻瓜化,只要敲几条命令就轻松解决所有问题。
下面是高级内容。
MSYS2项目的pacman源虽然提供了很多包,不过还是有很多没提供的,我们只能自己处理 Qt数据库组件数据库程序分成两部分,一部分是服务器,提供数据存取服务;另外一部分是客户端,给客户机使用。这两部分采用网络通信,所以只要网络协议兼容就可以,不需要二进制兼容,也就是说采用不同的编译器在不同的软硬件环境下开发出来的程序可以交互。而实践检测MSVC
编译出来的数据库服务器程序——不论是Oracle
还是MySQL
或者PostgreSQL——
都比较快,因为mingw
在涉及到文件IO
的部分多了一层虚拟层,所以比较慢,而数据库对存取操作要求比较多。所以服务器一般使用官方发布的MSVC
编译的二进制版本,而我们使用Qt只开发客户端,所以用mingw
也没问题。如果是Linux系统,gcc
是全面优化的,运行速度和稳定性全面超越了windows
,考虑到跨平台性,我更愿意使用mingw
开发,待代码测试没有问题再最后用MSVC
编译一次。 这里采用PostgreSQL讲解使用相同编译器时如何安装驱动,后面采用MySQL讲解使用不同编译器时如何安装驱动
MSYS2
没有自带Qt
的数据库组件。首先- pacman -Sy mingw-w64-x86_64-postgresql
安装PostgreSQL
,我们不用它来做服务器,只是使用其中的头文件和库文件开发自己的客户端。然后到Qt
官网下载源码包,注意源码包的版本要和pacman
安装的Qt
包的版本一致,而且要windows
下那个zip
包,不要那个.tar.gz
格式的。解压缩之后以MSYS
命令行进入\qt-everywhere-opensource-src-5.2.0\qtbase\src\plugins\sqldrivers\psql
然后- qmake
- mingw32-make
- mingw32-make install
Qt
访问PostgreSQL
的插件就编译好了,并安装在\msys64\mingw64\plugins\sqldrivers\qsqlpsql.dll
和qsqlpsql
d.dll
,分别对应release
版和debug
版。PostgreSQL
的服务器推荐使用官网提供的MSVC
编译出来的二进制文件。因为使用了pacman
安装PostgreSQL
,所以qmake
可以自动识别PostgreSQL
的头文件和库文件。
但是MySQL
就没有这幸运了。考虑到MySQL
被Oracle
收购之后愈发封闭,所以推荐使用MariaDB
来作为替代品,安装好之后可以在MariaDB
的目录下找到\include\mysql
和lib
两个目录,这里面存放着我们开发客户端所需的头文件和库文件。不过库文件是MSVC
编译出来的,mingw
不能直接使用,所以要处理一下。在http://www.mingw.org/wiki/MSVC_and_MinGW_DLLs介绍了MSVC
和mingw
文件格式不同时所必须采用的一些措施,按照其上所述,首先到http://wyw.dcweb.cn/download.asp?path=&file=reimp_new.zip下载reimp
程序的源代码,解压缩之后进入src
目录,然后mingw32-make
,会生成reimp.exe
程序,把这个程序放到/msys/mingw64/bin
目录下使用。根据http://blog.csdn.net/vah101/article/details/5974782所述,以MSYS
命令行进入MariaDB
的lib
子目录,然后会生成libmysql.def
文件,然后- dlltool -k -d libmysql.def -l libmysql.a
就会生成mingw
可使用的libmysql.a
文件。类似的对debug
版的libmysql
d.lib
文件如此操作也可以得到libmysql
d.a
然后修改\qt-everywhere-opensource-src-5.2.0\qtbase\src\plugins\sqldrivers\mysql
下的mysql.pro
,添加- INCLUDEPATH +="/mariadb/include/mysql"
- LIBS += "/mariadb/lib/libmysql.a"
MySQL提供了release和debug两个版本的库文件,这里却只使用了release的,因为笔者实践检验,debug版的连不上数据库。至于具体的路径名请诸位根据自己机器上的配置进行调整,记得用双引号括起来,否则一旦路径名中包含空格就会出错。
然后以MSYS2
命令行进入\qt-everywhere-opensource-src-5.2.0\qtbase\src\plugins\sqldrivers\mysql
- qmake
- mingw32-make
- mingw32-make install
Qt
访问MySQL
的插件就编译好了,并安装在\msys64\mingw64\plugins\sqldrivers\qsqlmysql.dll
和qsqlmysql
d.dll
,分别对应release
版和debug
版但是别忘了,qsqlmysql.dll
依赖MariaDB
的libmysql.dll
,所以还要把MariaDB
的libmysql.dll
加入系统PATH
,方法很简单,只要把这两个dll
文件复制到/msys64/mingw64/bin
目录下就可以了。 其实PostgreSQL的Qt插件也可以按照MariaDB的方法来安装,也就是用官方发布的MSVC编译出来的二进制PostgreSQL自带的库文件和头文件生成.a文件后再用mingw编译链接。只不过msys提供了mingw编译好的PostgreSQL包就图省事,当然也是为了介绍一下当数据库和Qt都是mingw编译的情况下,该如何处理;而MariaDB的插件安装就是介绍了一下不同编译器编译的情况下,该如何处理。关于MSVC和mingw混用的问题,网上还有很多文章,不一一列举。 http://blog.sina.com.cn/s/blog_6b3861870100qrvd.html有Qt使用SQL的例子,大家可以自己测试一下。如果最后输出为OK
那就没问题,除了QMYSQL
也可以测试QPSQL
。如果在混用MSVC
和mingw
时,没有使用reimp
把MSVC
的lib
转化为mingw
的a
文件,那么虽然程序可以编译出来,但是执行会出错。 安装qwt。qwt
是Qt
一个绘制图表的插件,可以提供类似excel
的效果,有广泛使用。Qt
下绘制图表的插件不止qwt
一种,不过它是免费开源的当中影响最大的。首先到http://sourceforge.net/projects/qwt/?source=directory下载其源代码,配合Qt-5.2
的版本是qwt-6.1
,不要使用老版本。解压缩源代码后 不用mingw32-make install
因为不能识别正确目录,所以不能正确安装。手动安装的方法如下:复制\qwt-6.1.0\lib
下的两个dll
文件到/msys64/mingw64/bin
复制\qwt-6.1.0\lib
下的两个.a
文件到/msys64/mingw64/x86_64-w64-mingw32/lib
复制qwt-6.1.0\src
下所有的.h
文件到/msys64/mingw64/x86_64-w64-mingw32/include/qwt
复制\qwt-6.1.0\designer\plugins\designer\qwt_designer_plugin.dll
文件到\msys64\mingw64\plugins\designer
然后启动qtdesigner,看看能否识别qwt插件。