您的位置:首页 > 编程语言 > Qt开发

Windows下MinGW编译静态Qt5 I

2015-09-24 09:07 676 查看
译自http://wiki.qt.io/Building_a_static_Qt_for_Windows_using_MingW。非专业翻译,掺杂个人理解,有删减。
注:仅支持Qt5,Win7或更高版本的系统。

WHY

qt.io下载的Qt安装包for windows是动态链接的,安装过程中一并安装了DLL文件。在动态环境下生成的Qt应用程序将动态调用这些DLL文件。

在开发、调试过程采用动态库真真是极好的,因为一切都是现成的,可以直接享用。
然而,如果现在要把程序部署到没有安装Qt的系统中,情况就复杂了——必须把程序调用的DLL一股脑部署过去。就算你祭出经典的DLL Dependency Walker神器,也不一定能分析出程序依赖的所有库文件。(译注:我都是用最笨的方法,反复地尝试,把缺失的dll文件拷贝过去,直到程序能正常工作。如果你有更好的办法,请告诉我)
所以,部署静态版本的应用程序更省事。
而构建应用程序的静态版,需要:Qt动态环境 + Qt静态版本。

下面将介绍如何用Windows PowerShell脚本,自动下载、构建和安装Qt静态开发环境。
注意:Qt4及更早的版本在Windows下构建、安装静态版本存在点问题。而Qt5对Windows下静态编译的支持度更好,本文即是基于Qt5。

MinGW vs. MSVC

Qt安装包有MinGW版和Microsoft Visual Studio版,它们互相不兼容、不可混用。择一而用之。
本文讲述如何用MinGW编译静态版Qt。如果用MSVC,可以参考下述的大致思路,但操作方法断然是有差别的。

目标环境

要在Windows下开发Qt程序,且后续部署到Windows平台,推荐按以下方式搭建开发环境:

动态版,安装路径C:\Qt
静态版,安装路径C:\Qt\Static。安装方法遵循本文描述的步骤。

动态版用来开发和调试。包括Qt命令行工具,GUI工具如Qt Creator, Assistant, Linguist等。
开发调试完成后,用静态版进行部署。静态版只有命令行工具。至于为什么不构建静态版的GUI工具,理由至少有二:

一是部署应用程序的工作通常都是用脚本自动完成的,不需要GUI工具;
二是构建Qt Creator静态版不很可行,因为插件(plugins)不支持静态环境。

限制

静态编译应用程序让部署更简单,但也存在一些限制。记得预先检查是否符合这些限制条件:

许可问题(略)
静态编译的程序不支持动态模块化方法。 //不支持自定义DLL?。。。

另外还要注意:

静态版的可执行文件比动态版体积大。不过由于动态版要同时部署DLL,所以总的体积来说,静态版更小。
静态版将解除对Qt或MinGW的DLL依赖。但不能解除对Windows DLL的依赖,比如kernel32.dll, user32.dll(略)

准备工作

1 安装Qt动态版

qt.io下载"Qt 5.5.0 for Windows 32-bit (MinGW 4.9.2, 959MB)"。你可以选择其他版本,但建议:待编译的源代码版本号=安装包版本号。
安装到默认路径(C:),安装时勾选Tools下面的MinGW选项。

2 Windows PowerShell

要求安装PowerShell 3.0或更高的版本。Win8已自带,Win7从微软下载安装(译注:打开后按照页面指引选择版本)。WinXP、Vista不支持PowerShell
3.0,因此本文的脚本不支持Win7以前的版本。

3 7-Zip

确保已下载安装7-Zip。

构建Qt静态环境

1 下载、运行,搞定

下载并执行脚本windows-build-qt-static.ps1。
上述链接从一个小型开源工程QtIMovie的git库直接获取脚本。你可以瞅一眼这个工程,里面包含一些构建脚本示例。
右键单击windows-build-qt-static.ps1,选择“使用PowerShell运行”。
脚本将会执行以下步骤:

下载Qt源代码
用动态版本中的MinGW构建Qt静态版本。构建库和命令行工具(qmake, moc, uic, lupdate, lrelease等)。
默认安装静态版Qt到C:\Qt\Static。

Qt框架复杂,代码量相当大,脚本的执行可能需要若干小时,请耐心等待。

2 命令行运行

除了右键“使用PowerShell运行”,也可以从PowerShell启动windows-build-qt-static.ps1:
windows-build-qt-static.ps1 [-QtSrcUrl url] [-QtStaticDir directory] [-QtVersion string] [-MingwDir directory] [-NoPause]

3 命令行参数说明

-QtSrcUrl url
指定Qt源文件URL。脚本默认包含最新版本的URL硬编码。
也可以直接修改脚本:
$QtSrcUrl = "http://download.qt-project.org/official_releases/qt/5.5/5.5.0/single/qt-everywhere-opensource-src-5.5.0.7z",

-QtStaticDir directory
指定安装Qt静态环境的根目录。默认为C。

-QtVersion string
指定Qt版本号。默认情况下,脚本会从Qt源文件名称中获取版本号。假如真有辣么一天Qt源文件名的格式变了,你可能得显式指定这个参数值。

-MingwDir directory
指定MinGW环境的根目录。默认使用已安装的Qt中自带的MinGW。

-NoPause
执行结束后不等待用户回车。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: