Qt 5.6 静态编译
!(https://file.mculoop.com/images/2022/11/qtbanner_1668587316.jpg)
## 起因
想要发布一个 Qt 小软件,但不得不附带一批动态链接库是件不爽的事情。以前介绍过一种方法,将动态链接库打包到可执行程序文件中去,实现单文件化((/thread-18-1-1.html))。目的虽然达到了,但很有可能被某些杀毒软件、某某管家之类的给识别成病毒、木马,还是不爽☹️
<!--more-->
## Qt 静态库
按照 LGPL 许可的要求,如果要闭源,只能使用 Qt 的动态链接库。如果你的软件是开源的,还是可以使用 Qt 静态库的。
### 准备原材料
编译 Qt 静态库(或者说是工具包 Tool Kit),首先要有原材料和工具。他们可以从 Qt 的安装包获取,也可以在网上单独下载。在安装 Qt 的时候选上 Source Components (这是源码)和 Tools/MinGW (这是编译工具):
!(https://file.mculoop.com/images/2022/11/698058426_1668582911.png)
### 搭建编译环境
MinGW 不用说了,编译 C++ 没有他可不行。此外一般还要用到 Python 和 Perl。
#### 下载并安装 Python2
[https://www.python.org/downloads/](https://www.python.org/downloads/)
#### 下载并安装 Perl
[http://www.activestate.com/activeperl/downloads](http://www.activestate.com/activeperl/downloads)
#### 配置系统环境变量 Path
Python 和 Perl 在安装的时候都可以选择自动加入到 Path 中。此外,还要把 mingw32-make.exe 及编译器的路径也加进 Path 变量:
```
C:\Perl\bin;
C:\Python27\;
C:\Qt\Qt5.6.0\Tools\mingw492_32\bin;
```
*注意:改完后别忘记重启一下使 Path 生效,不然又得半途而废,重新编译了!*
### 配置
在配置前修改 C:\Qt\Qt5.6.0\5.6\Src\qtbase\mkspecs\win32-g++\qmake.conf :
```
QMAKE_LFLAGS加上 -static
QMAKE_LFLAGS_DLL中的 -shared 改为 -static
```
似乎在编译、安装完成以后再改也一样(改安装后的 qmake.conf ),不改的话执行生成的软件时还会提示缺 libgcc_s_dw2-1.dll 。
好了,进入源码根目录:
```
cd C:\Qt\Qt5.6.0\5.6\Src
```
执行配置命令:
```
configure -opensource -confirm-license -static -release -platform win32-g++ -prefix "C:\Qt\static\5.6.0" -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -opengl desktop -qt-sql-sqlite -no-openssl -make libs -nomake tools -nomake examples -nomake tests
```
配置参数的含义,请参阅:
[http://doc.qt.io/qt-5/configure-options.html](http://doc.qt.io/qt-5/configure-options.html)
这一步的作用是生成静态的 qmake ,并用此 qmake 生成 qt.pro 的 makefile 。
### 漫长的编译过程来了
接下来就是要用静态 qmake 和 mingw32-make 根据前面生成的这个 makefile 文件来生成各子工程的 makefile ,并根据 makefile 编译、连接,生成静态库或可执行程序了。
执行命令:
```
mingw32-make
```
干脆睡一觉吧...
在 rMBP15 上用 PD11 搭建的 Win10 虚拟机上,大概两个半小时后完成了编译。
如果要重新配置和 make ,先执行这个的命令:
```
mingw32-make confclean
```
make 后就可以安装了,执行命令:
```
mingw32-make install
```
mingw32-make 将静态库安装在了 `-prefix "C:\Qt\static\5.6.0"` 定义的位置。
## 配置 Qt Creator
打开 Qt Creator ,菜单栏点击工具 -> 选项 -> 构建和运行 -> Qt Version ,添加 qmake 。
!(https://file.mculoop.com/images/2022/11/483773224_1668582934.png)
在构建套件选项卡中的 Qt Version 中选中刚才新建的 Qt Version 。
!(https://file.mculoop.com/images/2022/11/3738668500_1668582938.png)
在项目新建向导中的 Kit Selection 可以看到工具包了。
!(https://file.mculoop.com/images/2022/11/2429195536_1668582942.png)
好了,生成一个单 exe 软件拷贝到没有安装 Qt 运行环境的电脑上试试看吧。
## 如何编译并添加第三方静态库
以 QtXlsx ([一个操作 Excel 的库,详情看这里](thread-6-1-1.html))为例来说明。编译器仍然使用前文说到的 mingw32 ,这没有什么异议。需要注意的是 qmake 要使用我们编译好的静态版的,而不是安装时自带的动态版的。
配置系统变量 Path ,构建并安装:
```
set path=C:\Qt\static\5.6.0\bin;C:\Qt\Qt5.5.0\Tools\mingw492_32\bin;%path%
qmake
mingw32-make docs install
```
## 参考资料
Building a static Qt for Windows using MinGW : <http://wiki.qt.io/Building_a_static_Qt_for_Windows_using_MingW>
Qt Configure Options : <http://doc.qt.io/qt-5/configure-options.html>
页:
[1]