• 14088阅读
  • 0回复

[原创]win上傻瓜化安装Qt开发环境 [复制链接]

上一主题 下一主题
离线myleader
 

只看楼主 倒序阅读 楼主  发表于: 2014-02-08
— 本帖被 XChinux 执行加亮操作(2014-02-08) —
古老的MSYS搭建的开发环境不仅存在一些兼容性问题,而且还很繁琐,幸好mingw-build项目的开发者又做了更进一步的改进,他们开发了MSYS2项目。这个项目不仅兼容性更好,而且引入了包管理机制,可以直接从网上下载相关的软件,并解决相关的依赖性问题。这个项目的主页在

http://sourceforge.net/projects/msys2/


进入项目主页后,根据你的系统选择32位或者64位,现在大家使用的系统应该都是64位的了。下载好base包,然后解压缩到什么地方,一般我都是解压缩到D盘的根目录下,然后把bin目录加入系统PATH。在MSYS2根目录下有3bat文件,它们是启动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的具体使用方法。我们首先对系统升级
  1. pacman -Syu


就会检测整个系统可以升级的组件,并自动下载安装,这种情况下推荐升级完成后重启MSYS2环境,这样可以让升级过后的库文件发挥作用。

如果你觉得默认的服务器下载太慢,也可以使用中科大镜像。在/etc/pacman.d的3个文件中添加对应的信息,为了优先使用中科大镜像,还要把这些信息添加到文件的最前
mirrorlist.msys
  1. Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MSYS2/$arch


mirrorlist.mingw32
  1. Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MINGW/i686/


mirrorlist.mingw64
  1. Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MINGW/x86_64/


然后
  1. pacman -Sl
看一下到底有什么包可以安装。注意那个字母是英文的“l”,而不是数字“1”。里面的包分成3个目录mingw-w32mingw-w64msys,注意它们是不能混用的。从开发的角度来讲,mingw的兼容性和性能都是最好的,所以优先使用mingw的包,注意32位和64位不能混用;msys的包主要是帮助bash解释器更完整。也就是说基本原则是开发用的类库和编译器装mingw的,bash脚本的解释器装msys的。


然后安装Qt开发环境


  1. pacman -Sy mingw-w64-x86_64-qt-creator
pacman包管理器会自动解析其依赖性,自动安装qtmingwlibpng……如果中途下载出错了,那就再次运行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是极重要的,所以
  1. pacman -Sy make mingw-w64-x86_64-make

安装make程序,其中make包是msys的,mingw-w64-x86_64-make包是mingw的,这两个程序本质上是一样的,但是有些软件的安装脚本时候只能识别其中一个,所以还是两个都装上吧。





我一般还会再安装
  1. pacman -Sy p7zip tar wget patch diffutils git
注意不要安装msys目录下的gcc,它的运行效率比较低,而且没有更多用于开发的包。基本原则是如果mingw带了,那就不要安装MSYS的包。
MSYS2还自带了其他一些可用于开发的包:
fftw可以安装
LAPACK由于使用了官方blas,所以速度慢,推荐自行编译OpenBLAS
Boost可以安装
nasmyasm可以安装
Pythonperlruby推荐第三方安装。只是python有些类库是Qt部分组件所需要的,所以在安装Qt的时候就已经安装了Python2,不过这和WinPython等第三方包不冲突。而perlMSYS2中某些组件不可或缺的基础,所以也已经有了。
这些包请酌情根据自己的需要安装



如果你不需要使用更多复杂的功能,到这里就已经足够了,相当的傻瓜化,只要敲几条命令就轻松解决所有问题。


下面是高级内容。


MSYS2项目的pacman源虽然提供了很多包,不过还是有很多没提供的,我们只能自己处理



Qt数据组件





数据库程序分成两部分,一部分是服务器,提供数据存取服务;另外一部分是客户端,给客户机使用。这两部分采用网络通信,所以只要网络协议兼容就可以,不需要二进制兼容,也就是说采用不同的编译器在不同的软硬件环境下开发出来的程序可以交互。而实践检测MSVC编译出来的数据库服务器程序——不论是Oracle还是MySQL或者PostgreSQL——都比较快,因为mingw在涉及到文件IO的部分多了一层虚拟层,所以比较慢,而数据库对存取操作要求比较多。所以服务器一般使用官方发布的MSVC编译的二进制版本,而我们使用Qt只开发客户端,所以用mingw也没问题。如果是Linux系统,gcc是全面优化的,运行速度和稳定性全面超越了windows,考虑到跨平台性,我更愿意使用mingw开发,待代码测试没有问题再最后用MSVC编译一次。


这里采用PostgreSQL讲解使用相同编译器时如何安装驱动,后面采用MySQL讲解使用不同编译器时如何安装驱动


MSYS2没有自带Qt的数据库组件。首先
  1. 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
然后
  1. qmake
  2. mingw32-make
  3. mingw32-make install


Qt访问PostgreSQL的插件就编译好了,并安装在\msys64\mingw64\plugins\sqldrivers\qsqlpsql.dllqsqlpsqld.dll,分别对应release版和debug版。
PostgreSQL的服务器推荐使用官网提供的MSVC编译出来的二进制文件。
因为使用了pacman安装PostgreSQL,所以qmake可以自动识别PostgreSQL的头文件和库文件。


但是MySQL就没有这幸运了。
考虑到MySQLOracle收购之后愈发封闭,所以推荐使用MariaDB来作为替代品,安装好之后可以在MariaDB的目录下找到\include\mysqllib两个目录,这里面存放着我们开发客户端所需的头文件和库文件。不过库文件是MSVC编译出来的,mingw不能直接使用,所以要处理一下。在
http://www.mingw.org/wiki/MSVC_and_MinGW_DLLs
介绍了MSVCmingw文件格式不同时所必须采用的一些措施,按照其上所述,首先到
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命令行进入MariaDBlib子目录,然后
  1. reimp -d libmysql.lib

会生成libmysql.def文件,然后
  1. dlltool -k -d libmysql.def -l libmysql.a

就会生成mingw可使用的libmysql.a文件。类似的对debug版的libmysqld.lib文件如此操作也可以得到libmysqld.a


然后修改\qt-everywhere-opensource-src-5.2.0\qtbase\src\plugins\sqldrivers\mysql下的mysql.pro,添加
  1. INCLUDEPATH +="/mariadb/include/mysql"
  2. LIBS += "/mariadb/lib/libmysql.a"
MySQL提供了release和debug两个版本的库文件,这里却只使用了release的,因为笔者实践检验,debug版的连不上数据库。至于具体的路径名请诸位根据自己机器上的配置进行调整,记得用双引号括起来,否则一旦路径名中包含空格就会出错。



然后以MSYS2命令行进入\qt-everywhere-opensource-src-5.2.0\qtbase\src\plugins\sqldrivers\mysql
  1. qmake
  2. mingw32-make
  3. mingw32-make install


Qt访问MySQL的插件就编译好了,并安装在\msys64\mingw64\plugins\sqldrivers\qsqlmysql.dllqsqlmysqld.dll,分别对应release版和debug
但是别忘了,qsqlmysql.dll依赖MariaDBlibmysql.dll,所以还要把MariaDBlibmysql.dll加入系统PATH,方法很简单,只要把这两个dll文件复制到/msys64/mingw64/bin目录下就可以了。

其实PostgreSQLQt插件也可以按照MariaDB的方法来安装,也就是用官方发布的MSVC编译出来的二进制PostgreSQL自带的库文件和头文件生成.a文件后再用mingw编译链接。只不过msys提供了mingw编译好的PostgreSQL包就图省事,当然也是为了介绍一下当数据库和Qt都是mingw编译的情况下,该如何处理;而MariaDB的插件安装就是介绍了一下不同编译器编译的情况下,该如何处理。关于MSVCmingw混用的问题,网上还有很多文章,不一一列举。


http://blog.sina.com.cn/s/blog_6b3861870100qrvd.html
有Qt使用SQL的例子,大家可以自己测试一下。如果最后输出为OK那就没问题,除了QMYSQL也可以测试QPSQL。如果在混用MSVCmingw时,没有使用reimpMSVClib转化为mingwa文件,那么虽然程序可以编译出来,但是执行会出错。




安装qwt。qwtQt一个绘制图表的插件,可以提供类似excel的效果,有广泛使用。Qt下绘制图表的插件不止qwt一种,不过它是免费开源的当中影响最大的。首先到
http://sourceforge.net/projects/qwt/?source=directory
下载其源代码,配合Qt-5.2的版本是qwt-6.1,不要使用老版本。
解压缩源代码后
  1. qmake
  2. mingw32-make


不用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插件。






快速回复
限100 字节
 
上一个 下一个