另辟蹊径利用MSYS2安装MinGW+Qt开发环境含32位64位动态库静态库qwtopencv等等.docx
- 文档编号:30605388
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:27
- 大小:1.18MB
另辟蹊径利用MSYS2安装MinGW+Qt开发环境含32位64位动态库静态库qwtopencv等等.docx
《另辟蹊径利用MSYS2安装MinGW+Qt开发环境含32位64位动态库静态库qwtopencv等等.docx》由会员分享,可在线阅读,更多相关《另辟蹊径利用MSYS2安装MinGW+Qt开发环境含32位64位动态库静态库qwtopencv等等.docx(27页珍藏版)》请在冰豆网上搜索。
另辟蹊径利用MSYS2安装MinGW+Qt开发环境含32位64位动态库静态库qwtopencv等等
另辟蹊径-利用MSYS2安装MinGW+Qt开发环境
(含32位-64位-动态库-静态库-qwt-opencv等等)
ByWinland,2015.04.04
本文介绍在Windows系统里MSYS2环境和MinGW-w64编译套件安装、Qt开发环境安装。
一、MSYS2及其安装使用
1、MSYS2介绍
这得从MinGW和MSYS说起,原本GNU工具只在Linux/Unix系统里才有,随着Windows系统的广泛使用,为了在Windows系统里可以使用GNU工具,诞生了MinGW(MinimalistGNUforWindows)项目,利用MinGW就可以生成Windows里面的exe程序和dll链接库。
MinGW只是编译工具集没有类似Unix命令行环境,所以为了进一步在Windows系统上使用类Unix环境,MinGW项目组衍生了MSYS子项目,该项目从Cygwin派生,构造了一个类Unix命令行环境,并提供POSIX功能支持。
MinGW本身仅支持生成32位程序,而MinGW-w64项目相当于是MinGW的升级版,同时支持生成32位和64位程序。
MSYS2也是MSYS的衍生版,使用MinGW-w64编译工具集。
另外MSYS2还有一个非常强大的功能,它从ArchLinux引入了软件包管理器pacman工具,使得MSYS2功能扩展非常方便,并且可以通过pacman来解决各个软件和库之间的依赖关系,自动安装需要的依赖软件包。
MSYS2项目还打包了非常多的开发库和开发工具,能移植到Windows上的估计都打包了,而且还可以进行扩展。
因此通过MSYS2的pacman工具安装诸如MinGW-w64编译工具集、Qt开发库和QtCreator、qwt绘图插件、opencv开发库、ffmpeg、gstreamer、openssl、sqlite、postgresql、gtk、crypto++、mesa、openal、tcl/tk、vlc、zlib、SDL等,都是易如反掌。
对于python、perl、ruby、lua脚本环境,git、mercurial、cvs等版本控制软件,cmake、clang、llvm等编译生成工具,也可以通过pacman来安装。
MSYS2主页
http:
//msys2.github.io/
MSYS2详细安装指南
2、安装MSYS2
首先从MSYS2项目主页或SourceForge下载MSYS2的基本安装包:
32位系统下载msys2-i686-20150202.exe,
64位系统下载msys2-x86_64-20150202.exe。
请记住i686对应32位系统,x86_64对应64位系统,以后装软件都是这种对应关系。
下面以32位的msys2-i686-20150202.exe示范安装过程:
点击“下一步”,
注意上面选择安装位置,路径里不要有任何中文、特殊字符、空格等等,一般装在磁盘根的msys32或msys64目录。
注意磁盘剩余空间要有10GB以上剩余空间(硬盘空间不足的不要模仿),那个分区剩余空间比较大就装哪。
MSYS2本身不大,但是后续如果装Qt库、opencv之类的,会越装越多,所以要留足空间。
Qt动态库安装后是2.7GB,Qt静态库也是差不多2.7GB,非常占空间。
设置好安装路径,点击“下一步”,
点击下一步,
等待安装结束,
点击完成,看到MSYS2命令行:
先关闭该命令行,现在还干不了什么。
安装后,在开始菜单-->MSYS232bit-->
里面有三个命令行工具:
第一个MinGW-w64Win32Shell是指32位程序开发环境,在32位和64位Windows里都能用。
第二个MinGW-w64Win64Shell是指64位程序开发环境,仅在64位Windows里使用。
第三个MSYS2Shell是MSYS2环境管理命令行,可以安装卸载MSYS2环境里软件、管理文件系统、执行脚本等等。
只有在头两个MinGW-w64的命令行里才能使用gcc、g++等编译工具。
MSYS2Shell一般仅用于软件包安装管理和更新,另外两个Shell才是开发环境,不要弄错了。
3、更新MSYS2系统环境
MSYS2环境的软件和升级都是在线方式的,需要联网下载。
所以需要一个可靠的软件源,软件源配置文件在msys32\etc\pacman.d\文件夹里三个:
mirrorlist.mingw32、mirrorlist.mingw64、mirrorlist.msys
更换软件源的话只需要更改三个文件里的Server=右边的服务器地址,用写字板或其他编辑器打开编辑就行了,里面都是文本(注意备份旧的文件)。
软件源可以使用默认的SourceForge官方地址,也可以自定义,比如使用爱尔兰的源
①mirrorlist.mingw32中使用
ftp:
//ftp.heanet.ie/mirrors/
②mirrorlist.mingw64中使用
ftp:
//ftp.heanet.ie/mirrors/
③mirrorlist.msys中使用
ftp:
//ftp.heanet.ie/mirrors/
接下来打开开始菜单里的MSYS2Shell进行MSYS2系统更新:
(1)更新软件数据库
pacman--needed-Sybashpacmanpacman-mirrorsmsys2-runtime
有询问就输入Y,继续执行。
如果出现下载软件包错误,那就重复执行刚才的命令,直到成功为止。
(2)关闭旧的MSYS2命令行,重新打开MSYS2Shell,更新软件
pacman-Su
有询问就输入Y,继续安装
如果出现下载软件包错误,那就重复执行刚才的命令,直到成功为止。
更新成功之后,关闭MSYS2命令行,完成MSYS2系统更新。
二、安装MinGW-w64编译套件
默认情况下MSYS2只安装了基本环境,开发工具集没装,需要手动来安装,下面来安装。
打开开始菜单的MSYS2Shell,执行下面命令:
1、安装基本开发环境和工具
pacman-Sbase-develgitmercurialcvswgetp7zipperlrubypython2
说明pacman-S是安装软件包的意思,base-devel是基本开发工具和库,gitmercurialcvs三个是版本控制软件,可用于下载和发布项目源代码,wget是下载工具,p7zip是解压缩工具,perlrubypython2三个是脚本编程环境。
遇到“输入某个选择”,不打字,直接按Enter键,全部安装。
输入Y,进行安装。
如果出现下载软件错误,就重复执行刚才的命令,直到成功为止。
安装成功后,继续下面小节的安装。
2、安装MinGW-w64
对于32位系统,执行:
pacman-Smingw-w64-i686-toolchain
对于64位系统,执行:
pacman-Smingw-w64-x86_64-toolchain
注:
32位系统只能编译运行32位程序,64位系统既可以编译运行64位程序,也可以编译运行32位程序。
如果希望在64位系统同时编译32位和64位系统,可以把上面两个工具链都安装。
一般情况下只需要一个。
遇到“输入某个选择”,直接按Enter键,全部安装:
输入Y,进行安装。
如果出现下载错误,就重复执行刚才的命令,直到成功为止。
安装成功后关闭旧的命令行。
在开始菜单里打开MinGW-w64Win32Shell(64位系统是MinGW-w64Win64Shell),输入gcc-v就可以查看是否安装好了MinGW-w64编译工具集:
上面安装了MinGW-w64工具集和基本的开发库,还有perl、python、ruby等脚本编程环境。
接下来我们来安装Qt开发环境。
三、安装Qt开发环境
Qt开发环境默认情况下都是使用动态链接库的,我们先安装动态库版本Qt和集成开发环境QtCreator,然后安装静态Qt库。
注意:
动态Qt库可以用于遵循LGPL的商业闭源软件,也可以用于GPL开源软件,而静态Qt库只能用于GPL开源软件,这个规则要记牢!
1、安装动态Qt库和QtCreator
打开开始菜单里的MSYS2Shell,
32位系统执行:
pacman-Smingw-w64-i686-qt5mingw-w64-i686-qt-creator
64位系统执行:
pacman-Smingw-w64-x86_64-qt5mingw-w64-x86_64-qt-creator
遇到询问就输入Y进行安装。
Qt开发库下载时是500MB左右,比较费时间,需要等待,如果下载过程中出现错误之类的,重复执行刚才的命令,直到成功安装为止。
软件管理工具pacman自动使用断点续传,不会重复下载,所以可放心地重复执行命令直到成功安装。
安装Qt时,有一个软件包mingw-w64-i686-fontconfig,安装配置得非常慢,要耐心等它安装好,不要以为pacman坏了或什么的,这个包配置就是慢;还有就是mingw-w64-i686-qt5这个包本身非常大,安装起来也比较慢,需要耐心等待。
安装好了之后,需要在MinGW-w64Win32Shell(64位系统是MinGW-w64Win64Shell)启动Qt开发工具,比如:
qtcreator&
assistant&
designer&
linguist&
说明:
qtcreator是集成开发环境的命令名称,后面接空格和&是指后台启动新进程,而不需要占用Shell命令前台。
QtCreator启用时需要加载插件需要些时间,启动之后如下图所示:
这里就不示范动态库的HelloWorld编译生成了。
就算是最简单的Qt版Hellworld,它在Windows系统里依赖的动态链接库也是很多的,可能有十几个,所以用于发布程序很费劲。
下面介绍Qt静态库安装和示范。
2、Qt静态库安装
打开开始菜单里的MSYS2Shell,
32位系统执行:
pacman-Smingw-w64-i686-qt5-static
64位系统执行:
pacman-Smingw-w64-x86_64-qt5-static
遇到询问就输入Y进行安装。
静态Qt库下载时大小也是500MB左右,安装后也是2.7GB左右,下载和安装都很费时间。
如果下载过程中出错,就重复执行上面命令直到成功为止。
上面安装的是完整的静态Qt库,包括Debug调试版和Release发行版,不建议使用静态库生成调试版程序,因为一个Helolworld都有280MB,静态库生成的Release版Helloworld只有11MB,并且不依赖额外的dll,一个exe走遍天下,所以适合发布程序。
但是对于静态库,必须用GPL开源许可证发布程序。
LGPL仅适用于动态链接库。
3、QtCreator生成静态链接Qt程序示范
打开MinGW-w64Win32Shell(64位系统是MinGW-w64Win64Shell),执行命令:
qtcreator&
在QtCreator点击菜单“文件”-->“新建文件或项目”,
新建QtWidgetsApplication,
项目名称设为hello,其他的不用变,点“下一步”:
KitSelection是选择Qt套件的意思,前面装了静态和动态版本,所以有两个,都选上,进入下一步:
基类选择QWidget,进入下一步:
点击完成,进入项目代码编辑界面:
将左下角Debug字样的按钮点开,可以看到两个Qt套件,带有(static)的是静态库,没有static字样的是动态库。
一般动态库配合Debug和Release构建模式使用;
静态库配合Release构建模式使用,尽量不要使用静态库生成Debug版程序,因为太大了。
我们选择静态库套件的Release模式构建,然后点击左下角“Debug”字样下面的三角图标按钮,
构建并运行成功程序。
Win7系统默认在
C:
\Users\用户名\Documents\build-hello-Desktop_Qt_static_MinGW_w64_32bit_MSYS2-Release\release
文件夹里可以找到hello.exe,11.5MB大小,这个可比动态库编译的发布省事多了。
(尽量不要用静态库生成Debug版程序,不仅生成慢,而且巨无霸,我试了一下是270MB。
)
注意:
对于Qt静态库生成的QtQuick应用程序,运行时有bug(动态链接库没这个问题):
QQmlApplicationEnginefailedtoloadcomponent
qrc:
/main.qml:
2module"QtQuick.Controls"isnotinstalled
qrc:
/main.qml:
1module"QtQuick"isnotinstalled
qrc:
/main.qml:
2module"QtQuick.Controls"isnotinstalled
qrc:
/main.qml:
1module"QtQuick"isnotinstalled
这是Qt库的bug,不是MSYS2项目能改变的。
有临时的解决方法,参考:
详情请见帖子的从16楼到21楼。
四、其他扩展开发库安装
MSYS2项目里的软件和开发库远不止上面那些,之前提到了一大堆,下面首先介绍pacman通用的搜索安装方法,示范一下qwt绘图插件和opencv的安装。
1、通用的软件搜索安装方法(以qwt为例)
打开开始菜单里的MSYS2Shell,
(1)一般首先更新软件仓库和升级系统,这样保证能获知新发布的软件包名称
pacman-Syu
(2)检索想要的软件包名称
pacman-Ssqwt
说明pacman的-Ss选项就是查询远程软件仓库里的软件包名,qwt就是我们想装的软件名称。
可以看到有四个顶头没缩进的行,mingw32是软件类别,代表32位软件,里面有qt4的和qt5的两个版本qwt,最末尾的数字6.1.0-1是qwt软件版本。
有4个字符缩进的行是上一行软件包的描述。
Mingw64也是软件类别,代表64位软件,里面也有qt4和qt5两个版本的qwt,末尾的数字6.1.0-1也是qwt的版本。
(3)安装所需的软件包
安装时只是需要软件包名,不需要输入软件类别和最末尾的数字版本号,安装32位qt5的qwt命令就是:
pacman-Smingw-w64-i686-qwt-qt5
如果安装64位qt5的qwt命令就是:
pacman-Smingw-w64-x86_64-qwt-qt5
安装时遇到提示是否安装就输入Y执行安装。
然后我们查看qwt安装后的效果,需要打开开始菜单里的开发命令行MinGW-w64Win32Shell(64位系统是MinGW-w64Win64Shell),执行命令:
qtcreator&
对于QtCreator,打开一个普通窗体项目,打开界面文件*.ui,进入设计界面,把左边的控件(或叫部件)列表拖到最底下:
看到可用的QWT控件,拖到界面窗体里面用,并且要在项目文件.pro里面加两行:
CONFIG+=qwt
INCLUDEPATH+=/msys32/mingw32/include/qwt
64位系统把32改成64就行了。
另外注意QWT只有动态库版本,得按照动态库方式发布。
带有QWT控件的程序运行后类似下面这个:
2、安装opencv
与上面过程类似,因为刚升级过系统就不需要执行pacman-Syu,直接两步就行了,打开开始菜单MSYS2Shell,
(1)检索opencv
pacman-Ssopencv
(2)安装
32位系统安装i686的软件包:
pacman-Smingw-w64-i686-opencv
64位系统安装x86_64的软件包:
pacman-Smingw-w64-x86_64-opencv
装好就可以使用了。
如果要在Qt程序里使用,那么需要在.pro文件里写上
LIBS+=-lopencv_calib3d\
-lopencv_contrib\
-lopencv_core\
-lopencv_features2d\
-lopencv_flann\
-lopencv_gpu\
-lopencv_highgui\
-lopencv_imgproc\
-lopencv_legacy\
-lopencv_ml\
-lopencv_nonfree\
-lopencv_objdetect\
-lopencv_ocl\
-lopencv_photo\
-lopencv_stitching\
-lopencv_superres\
-lopencv_ts\
-lopencv_video\
-lopencv_videostab\
-lopencv_viz
上面链接了opencv的20个模块,一般情况下项目代码里用了几个链接几个,不需要像上面全部链接。
上面就是穷举了opencv的所有模块,并且都链接了。
源代码里引用opencv的话,可以如下所示
#include"widget.h"
#include
#include
#include
#include
#include
intmain(intargc,char*argv[])
{
QApplicationa(argc,argv);
Widgetw;
w.show();
//
//声明IplImage指针
IplImage*pImg;
//载入图片
pImg=cvLoadImage("/1.jpg",1);
//创建窗口
cvNamedWindow("Image",1);
//显示图像
cvShowImage("Image",pImg);
//等待按键
cvWaitKey(0);
//销毁窗口
cvDestroyWindow("Image");
//释放图像
cvReleaseImage(&pImg);
//
returna.exec();
}
包含头文件的opencv文件夹和opencv2文件夹在MSYS2系统包含路径里(32位系统是/msys32/mingw32/include/),所以可以直接用尖括号<>引用,QtCreator会自动补全头文件路径和名称的。
上面会弹出两个窗口,一个是Qt的主窗口,一个是opencv显示图像的窗口,两个都正常工作:
左边是opencv显示图片的窗口(图片文件1.jpg在磁盘根目录),右边是上面带有qwt控件的Qt窗口。
注意opencv也是只有动态库版本的,所以opencv+Qt的程序必须按照动态库来发布。
示范就到这里,其他的如ffmpeg、openssl之类的也可以类似安装。
对于动态库发布Qt程序,可以借助DependencyWalker工具打开exe文件,查看依赖哪些dll,然后从msys32\mingw32\bin文件夹里找对应的dll复制到exe一块发布。
或者直接运行exe,看它提示要哪些dll,一个个复制。
不过动态库发布方式有点坑爹,上面带有opencv和qwt的发行版hello.exe,需要的dll数目是34个,共计58MB:
\build-hello-Desktop_Qt_MinGW_w64_32bit_MSYS2-Release\release的目录
2015/04/0321:
3233,280hello.exe
2015/02/1405:
5676,571libbz2-1.dll
2015/02/1506:
18664,653libfreetype-6.dll
2015/03/2216:
34119,476libgcc_s_dw2-1.dll
2015/03/2420:
561,372,607libglib-2.0-0.dll
2014/08/3122:
23287,521libHalf-2_2.dll
2015/03/2219:
14358,127libharfbuzz-0.dll
2015/02/1406:
371,067,193libiconv-2.dll
2014/11/1100:
3225,352,575libicudt54.dll
2014/11/1100:
322,304,620libicuin54.dll
2014/11/1100:
321,487,727libicuuc54.dll
2014/08/3122:
2348,527libIex-2_2.dll
2014/09/0120:
322,791,882libIlmImf-2_2.dll
2014/08/3122:
2332,660libIlmThread-2_2.dll
2014/08/3122:
2370,787libImath-2_2.dll
2015/02/1518:
33139,177libintl-8.dll
2015/01/3005:
40362,433libjasper-1.dll
2014/08/2516:
5866,202libjbig-0.dll
2015/01/1821:
45436,206libjpeg-8.dll
2015/02/2806:
34173,896liblzma-5.dll
2015/03/0616:
302,038,307libopencv_core2411.dll
2015/03/0616:
30397,639libopencv_highgui2411.dll
2014/09/2716:
06254,165libpcre16-0.dll
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 另辟蹊径 利用 MSYS2 安装 MinGW Qt 开发 环境 32 64 动态 静态 qwtopencv 等等
![提示](https://static.bdocx.com/images/bang_tan.gif)
链接地址:https://www.bdocx.com/doc/30605388.html