找回密码
 立即注册
搜索
查看: 330|回复: 0

Qt 5.6 静态编译

[复制链接]

266

主题

0

回帖

1119

积分

管理员

积分
1119
发表于 2023-12-19 17:22:43 | 显示全部楼层 |阅读模式

起因

想要发布一个 Qt 小软件,但不得不附带一批动态链接库是件不爽的事情。以前介绍过一种方法,将动态链接库打包到可执行程序文件中去,实现单文件化(Qt 之可执行文件单文件化)。目的虽然达到了,但很有可能被某些杀毒软件、某某管家之类的给识别成病毒、木马,还是不爽☹️

Qt 静态库

按照 LGPL 许可的要求,如果要闭源,只能使用 Qt 的动态链接库。如果你的软件是开源的,还是可以使用 Qt 静态库的。

准备原材料

编译 Qt 静态库(或者说是工具包 Tool Kit),首先要有原材料和工具。他们可以从 Qt 的安装包获取,也可以在网上单独下载。在安装 Qt 的时候选上 Source Components (这是源码)和 Tools/MinGW (这是编译工具):

搭建编译环境

MinGW 不用说了,编译 C++ 没有他可不行。此外一般还要用到 Python 和 Perl。

下载并安装 Python2

https://www.python.org/downloads/

下载并安装 Perl

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

这一步的作用是生成静态的 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 。

在构建套件选项卡中的 Qt Version 中选中刚才新建的 Qt Version 。

在项目新建向导中的 Kit Selection 可以看到工具包了。

好了,生成一个单 exe 软件拷贝到没有安装 Qt 运行环境的电脑上试试看吧。

如何编译并添加第三方静态库

以 QtXlsx (一个操作 Excel 的库,详情看这里)为例来说明。编译器仍然使用前文说到的 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


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|棱讯科技 ( 粤ICP备2024228160号-2|粤公网安备44030002003510号 )

GMT+8, 2024-7-27 12:44 , Processed in 0.018931 second(s), 3 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表