• 为什么要静态编译

在默认情况下,用QtCreator编译程序时,使用的是动态编译。编译好的程序在运行时需要另外加上相应的Qt库文件,一大堆dll文件。如果想将生成的程序连同所需要的库一起完整地打包成一个可执行程序,那就需要使用静态编译。Qt官方不提供静态编译好的安装包,所以需要我们在自己的电脑上静态编译。而且exe文件会比动态编译的要小上很多。

  • 编译安装准备

1.源码下载
Qt最新版5.14.0的源码下载地址:http://mirror.bit.edu.cn/qtproject/archive/qt/5.14/5.14.0/single/qt-everywhere-src-5.14.0.zip
下载后解压备用
2.工具准备
ActivePerl
ActivePerl下载地址:Download and Install Perl: ActivePerl | ActiveState
选择最新的版本 5.28,然后注册,再下载,我安装的是5.26版本。
安装时默认会添加ActivePerl到环境变量。
测试添加是否成功:

C:\Users\bohe>perl -v

This is perl 5, version 26, subversion 1 (v5.26.1) built for MSWin32-x64-multi-thread
(with 1 registered patch, see perl -V for more detail)

Copyright 1987-2017, Larry Wall

Binary build 2601 [404865] provided by ActiveState http://www.ActiveState.com
Built Dec 11 2017 12:23:25

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

Python
Python需要安装python2(python2.7.5或者更新的2.7版本)和Python3(我安装的Python3.7.6)。
python下载地址https://www.python.org/downloads/release
测试添加是否成功:

C:\Users\bohe>python
Python 2.7.5 (default, May 15 2013, 22:44:16) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

C:\Users\bohe>python3
Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 01:54:44) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

C:\Users\bohe>

缺少python2就会报

WARNING: Python version 2 (2.7.5 or later) is required to build QtWebEngine. WARNING: 64-bit cross-building or native toolchain is required to build QtWebEngine.

Ruby
Ruby下载地址:https://rubyinstaller.org/downloads/
选择Ruby+Devkit 2.6.5-1下载,(x64)还是(x86)根据自己电脑选择。
安装时默认会添加Ruby到环境变量。
测试添加是否成功:

C:\Users\bohe>ruby -v
ruby 2.6.5p114 (2019-10-01 revision 67812) [x64-mingw32]

LLVM
LLVM下载地址:https://prereleases.llvm.org/win-snapshots/
根据需要编译64位还是32位的Qt选择最新的x64还是x86
我选的LLVM-10.0.0-e20a1e486e1-win32.exe。
安装时软件会提示需不需要添加LLVM到环境变量,选第二项,为所有用户添加LLVM到环境变量。
测试添加是否成功:
此电脑->属性->高级系统设置->高级->环境变量->系统环境变量->Paths,点编辑,看里面有没有LLVMbin这部分
缺少这个程序或者找个程序的环境变量,就会报

Either ensure that llvm-config is in your PATH environment variable, or set LLVM_INSTALL_DIR to the location of your llvm installation. On Linux systems, you may be able to install libclang by installing the libclang-dev or libclang-devel package, depending on your distribution. On macOS, you can use Homebrew's llvm package. On Windows, you must set LLVM_INSTALL_DIR to the installation path. 

错误
编译环境选择
在Windows上,有两个预构建环境可供选择:一个是MinGW,另一个是Microsoft Visual Studio(MSVC)。这两个环境不兼容,无法混合。你必须选择一个。
这两者的区别如下:

当你的项目使用MinGW编译的使用,想要用一个MSVC编译生成的库时就会有问题。使用MinGW编译项目的时候,所使用的Lib也要是MinGW编译的。如果你只是开发Window平台的软件时,最好用Qt MSVC组合,这样可以使用大量的第三方lib,还有很多的构建指令,毕竟window上MSVC才是王道。

我选择MSVC,打开安装VS时自带安装的MSCV:Developer Command Prompt for VS 2019(或者是VS 2017的开发人员命令提示符)。
编译
在D盘新建一个目录用来存放编译好的内容:D:qt(根据需要自己更改)
在Developer Command Prompt for VS 2019(或VS 2017的开发人员命令提示符的命令行)里进入Qt源代码目录:

**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.4.2
** Copyright (c) 2019 Microsoft Corporation
**********************************************************************

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>cd /

C:\>D:

D:\>cd qt-everywhere-src-5.14.0

D:\qt-everywhere-src-5.14.0>

修改源码里的qtbasemkspecscommonmsvc-desktop.conf文件
修改-MD为-MT

QMAKE_CFLAGS_RELEASE    = $$QMAKE_CFLAGS_OPTIMIZE -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MD
QMAKE_CFLAGS_DEBUG      = -Zi -MDd

改为

QMAKE_CFLAGS_RELEASE    = $$QMAKE_CFLAGS_OPTIMIZE -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MT
QMAKE_CFLAGS_DEBUG      = -Zi -MTd

D的意思是动态编译(dynamic),T的意思是静态编译(static)。
这一步官方教程没有要求,但其他人的很多教程里都有写,我就加上了
配置config文件

configure.bat -static -prefix "D:\qt" -confirm-license -opensource  -debug-and-release -platform win32-msvc  -nomake examples -nomake tests  -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -mp

具体含义如下:

configure.bat 
-static //指明是静态编译
-prefix "D:\qt" //指明安装的目录
-confirm-license -opensource  //指明是开源版本的qt
-debug-and-release //指明需要debug版和release版,可以单独选择release版
-platform win32-msvc  //指明使用msvc编译
-nomake examples -nomake tests  //不编译样例
-plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg //可选插件
-opengl desktop 
-mp //多核编译

make
上面提到过在Windows上,有两个预构建环境可供选择:一个是MinGW,另一个是Microsoft Visual Studio(MSVC)。
我选择的是msvc环境,使用命令nmake即可进行编译。

nmake

但是MSVC自带的nmake没有多线程编译功能,有一个替代功能的软件jom可以进行nmake的多线程编译,即不用nmake命令,使用jom命令代替nmake。
jom的下载地址:http://download.qt.io/official_releases/jom/jom.zip
运行命令:

D:\jom_1_1_3\jom.exe j8 

j8代表使用8核,编译过程需要几个小时,make完成后源码和编译后的共有17.1G大小。
构建完后清理一下中间文件: jom.exe clean(使用nmake构建的话使用:nmake clean)
make install
因为jom是多线程的运行,但我需要用电脑,所以我使用nmake单线程install:

nmake install

多线程install使用:

jom install

安装完成后,QT的文件夹有2.98G的大小。
添加到Qt Creator
这里需要说明一下,Qt Creator现在已经不能直接下载最新版本,需要下载在线安装程序:http://download.qt.io/archive/online_installers/3.1/
下载后安装最新版的Qt Creator4.9
①添加Qt Versions:
请输入图片描述
②新建一个构建套件,Qt版本选择刚添加的静态版,其他选项与动态版相同即可。
请输入图片描述
成功:
请输入图片描述
一个exe的大小是11M,包括了所有需要的内容。
小结
Windows环境静态编译安装和部署Qt总体来说还是比较简单,但是会由于缺少各种软件、环境变量等导致不能正常进行,很多教程都没有提需要同时安装python2和python3,同时,也没有说需要安装LLVM这个软件,没有LLVM这个软件静态编译安装和部署无法完成,直接会报错。

Last modification:January 6th, 2020 at 10:30 am
If you think my article is useful to you, please feel free to appreciate