静态编译Qt6.8.0(win10+MSVC2022+openssl+静态运行时)

前言

因项目需要,客户需要一个单独的exe程序,被迫自己静态编译一版qt

本次需求只是需要使用widget、qml、network(需要openssl)模块,其他模块只是顺带编译,所以本文档仅供有需要的小伙伴参考,若需要特定模块,请自行搭建相关编译环境

一、需求分析

Qt官方提供动态库开发环境,可以直接在线下载(Qt5.15开始,开源用户不再提供离线安装包),发布时,有一堆动态库

若直接使用静态编译,可以把所有库都放到一个exe程序中,不再依赖其他动态库或插件。但一般静态编译不包括编译器的运行时,在未安装msvc的电脑上,需要先安装微软VC++运行库合集(可通过360软件库直接下载)

所以本次考虑,直接将编译器的运行时,直接加入,到时只有一个exe程序即可运行

注:这样做,可能导致无法正常加载一般的第三方库,需要使用同一编译器编译带运行时的第三方库

二、环境准备

1.msys

网上安装教程比较多,就不再重复了,需要安装flex和bison

命令如下(时间所限,未验证)

pacman -S flex bison

2.vs2022

笔者使用的是社区版,这个就不重复了,记得选择C++开发环境

3.openssl

参考下笔者的文档

编译OpenSSL库(win10+msvc2022_x64)-CSDN博客

需要使用带运行时的openssl3.3静态库

4.python

笔者安装的是python3.10的版本(编译qml相关,需要)

5.ninja

笔者使用的是Qt在线安装包里的

6.cmake

笔者使用的是Qt在线安装包里的,版本号3.29.3

7.perl

笔者直接使用360软件管家下载的ActivePerl 64位(不清楚是否需要,先加上了)

8.Ruby

笔者直接使用360软件管家下载的Ruby(不清楚是否需要,先加上了)

三、Qt源码下载

https://download.qt.io/official_releases/qt/6.8/6.8.0/single/qt-everywhere-src-6.8.0.zip

四、Qt源码编译

1.将源码解压到一目录中,注意目录不要出现空格或中文,目录名也不要太长

笔者解压到了G:\Qt\6.8.0\Src\qt-everywhere-src-6.8.0

2.修改编译配置文件

打开{qt_source_dir}\qtbase\mkspecs\common\msvc-desktop.conf

笔者对应目录为G:\Qt\6.8.0\Src\qt-everywhere-src-6.8.0\qtbase\mkspecs\common\msvc-desktop.conf

使用文本编译器打开查找-MD,全部替换成-MT,笔者修改后如下

3.打开vs2022的控制台

切换到源码目录,笔者的目录如下

cd g:\Qt\6.8.0\Src\qtbase-everywhere-src-6.8.0

4.配置环境变量

执行以下指令

set PATH=D:\Qt\Tools\llvm-mingw1706_64\bin;D:\Qt\Tools\CMake_64\bin;D:\Qt\Tools\Ninja;D:\Ruby33-x64\bin;D:\Perl64\bin;%PATH%;D:\msys64\usr\bin;

set OPENSSL_ROOT_DIR={openssl_dir}\openssl-3.3.2\install_static

set OPENSSL_USE_STATIC_LIBS=ON

 以上是笔者配置的环境变量,需要根据自己的实际情况配置下

笔者是直接在控制台窗口中进行的,也可以直接配置到系统的环境变量中

5.配置qt源码

建议使用影响编译,这样不会污染源码目录

笔者执行的命令如下:

cd ..

mkdir build

..\qt-everywhere-src-6.8.0\configure -static -static-runtime -prefix "D:\Qt\6.8.0\msvc2022_64_static"  -debug-and-release -platform win32-msvc  -nomake examples -nomake tests   -qt-zlib -qt-libpng -qt-libjpeg -opengl dynamic -openssl-linked

部分配置选项解释:

-static

启用静态编译

-static-runtime

启用静态运行时

-prefix "D:\Qt\6.8.0\msvc2022_64_static"

预设安装目录

-confirm-license -opensource

是开源的

-debug-and-release

同时编译debug库和release库

-platform win32-msvc

使用msvc编译

-opengl dynamic 动态链接opengl库

-openssl-linked

直接链接openssl库编译(推荐)

若是需要进一步配置Qt源码,可以使用控制台打开cmake-gui.exe,直接打开编译目录

配置完成后,点击配置,

注:qt6.8.0不会出现配置结果列表(可能是个bug),需要到编译输出目录,找到config.summary文件,使用文本编译器打开看

笔者比较关心的是openssl是否已启用

确认无误后,直接点击生成

6.编译Qt源码

直接执行如下命令:

cmake --build . --parallel 6

#6代表开户6个线程同时编译

注:网上有说,开启多线程编译,有时会因编译的先后顺序不对,导致中止编译,只要重新执行下命令就可以继续编译

7.安装Qt

直接执行如下 命令

ninja install

 笔者已经编译好的Qt6.8.0静态库(静态运行时),比较大,分成了两个包

part1  part2

参考资料:

Building Qt Sources | Qt 6.9

Qt for Windows - Building from Source | Qt 6.9

Qt Configure Options | Qt 6.9

后记

声明:因笔者本次编译时间过紧,并未进行全部验证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

꧁白杨树下꧂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值