当前位置: 首页 > news >正文

Qt windeployqt 打包的Qt动态库介绍

前言

在 Windows 平台,通常使用 Qt 的工具 windeployqt 将可执行文件的相关 Qt 依赖项部署到当前路径下。

Windows windeployqt 部署工具

Windows 部署工具 windeployqt 旨在自动化创建一个可部署文件夹的过程,该文件夹包含运行应用程序所需的 Qt 相关依赖项(库、QML 导入、插件和翻译)。它为 Windows 桌面应用程序创建了一个安装树,可以轻松地捆绑到安装包中。

该工具可以在 QTDIR/bin/windeployqt 中找到。为了正确运行,它需要在构建环境中运行。当使用 Qt 在线安装器时,应使用脚本 QTDIR/bin/qtenv2.bat 来设置它。

对于 Windows 桌面应用程序,默认情况下,编译器所需的运行时文件也会复制到部署文件夹中(除非指定了 --no-compiler-runtime 选项)。在 Microsoft Visual C++使用的发布版本中,这些包括 Visual C++可再发行包,这些包旨在由应用程序的安装程序在目标机器上递归安装。否则,将使用编译器运行时的共享库。

windeployqt 工具帮助说明:

Usage: windeployqt [options] [files]
Qt Deploy Tool 6.0.0The simplest way to use windeployqt is to add the bin directory of your Qt
installation (e.g. <QT_DIR\bin>) to the PATH variable and then run:windeployqt <path-to-app-binary>
If ICU, etc. are not in the bin directory, they need to be in the PATH
variable. If your application uses Qt Quick, run:windeployqt --qmldir <path-to-app-qml-files> <path-to-app-binary>Options:-?, -h, --help              Displays help on commandline options.--help-all                  Displays help including Qt specific options.-v, --version               Displays version information.--dir <directory>           Use directory instead of binary directory.--qmake <path>              Use specified qmake instead of qmake from PATH.--libdir <path>             Copy libraries to path.--plugindir <path>          Copy plugins to path.--debug                     Assume debug binaries.--release                   Assume release binaries.--pdb                       Deploy .pdb files (MSVC).--force                     Force updating files.--dry-run                   Simulation mode. Behave normally, but do notcopy/update any files.--no-patchqt                Do not patch the Qt6Core library.--ignore-library-errors     Ignore errors when libraries cannot be found.--no-plugins                Skip plugin deployment.--no-libraries              Skip library deployment.--qmldir <directory>        Scan for QML-imports starting from directory.--qmlimport <directory>     Add the given path to the QML module searchlocations.--no-quick-import           Skip deployment of Qt Quick imports.--translations <languages>  A comma-separated list of languages to deploy(de,fi).--no-translations           Skip deployment of translations.--no-system-d3d-compiler    Skip deployment of the system D3D compiler.--compiler-runtime          Deploy compiler runtime (Desktop only).--no-virtualkeyboard        Disable deployment of the Virtual Keyboard.--no-compiler-runtime       Do not deploy compiler runtime (Desktop only).--json                      Print to stdout in JSON format.--no-opengl-sw              Do not deploy the software rasterizer library.--list <option>             Print only the names of the files copied.Available options:source:   absolute path of the source filestarget:   absolute path of the target filesrelative: paths of the target files, relativeto the target directorymapping:  outputs the source and the relativetarget, suitable for use within anAppx mapping file--verbose <level>           Verbose level (0-2).Qt libraries can be added by passing their name (-xml) or removed by passing
the name prepended by --no- (--no-xml). Available libraries:
bluetooth concurrent core declarative designer designercomponents gui qthelp
multimedia multimediawidgets multimediaquick network nfc opengl openglwidgets
positioning printsupport qml qmltooling quick quickparticles quickwidgets script
scripttools sensors serialport sql svg svgwidgets test websockets widgets xml
webenginecore webengine webenginewidgets 3dcore 3drenderer 3dquick
3dquickrenderer 3dinput 3danimation 3dextras geoservices webchannel serialbus
webviewArguments:[files]                     Binaries or directory containing the binary.

例如使用 windeployqt 工具后, Qt 6.7.0 的动态库依赖如下:

.
├── Qt6Cored.dll
├── Qt6Guid.dll
├── Qt6Networkd.dll
├── Qt6Svgd.dll
├── Qt6Widgetsd.dll
├── QtProjectTemplate.exe
├── concrt140d.dll
├── d3dcompiler_47.dll
├── dxcompiler.dll
├── dxil.dll
├── generic
│   └── qtuiotouchplugind.dll
├── iconengines
│   └── qsvgicond.dll
├── imageformats
│   ├── qgifd.dll
│   ├── qicod.dll
│   ├── qjpegd.dll
│   └── qsvgd.dll
├── msvcp140_1d.dll
├── msvcp140_2d.dll
├── msvcp140d.dll
├── msvcp140d_atomic_wait.dll
├── msvcp140d_codecvt_ids.dll
├── networkinformation
│   └── qnetworklistmanagerd.dll
├── opengl32sw.dll
├── platforms
│   └── qwindowsd.dll
├── styles
│   └── qmodernwindowsstyled.dll
├── tls
│   ├── qcertonlybackendd.dll
│   ├── qopensslbackendd.dll
│   └── qschannelbackendd.dll
├── translations
│   ├── qt_ar.qm
│   ├── ...
│   ├── qt_zh_CN.qm
│   └── qt_zh_TW.qm
├── vccorlib140d.dll
├── vcruntime140_1d.dll
├── vcruntime140_threadsd.dll
└── vcruntime140d.dll

Qt 5.15.2 动态库依赖如下:

.
├── D3Dcompiler_47.dll
├── QtProjectTemplate.exe
├── Qt5Cored.dll
├── Qt5Guid.dll
├── Qt5Svgd.dll
├── Qt5Widgetsd.dll
├── iconengines
│   └── qsvgicond.dll
├── imageformats
│   ├── qgifd.dll
│   ├── qicnsd.dll
│   ├── qicod.dll
│   ├── qjpegd.dll
│   ├── qsvgd.dll
│   ├── qtgad.dll
│   ├── qtiffd.dll
│   ├── qwbmpd.dll
│   └── qwebpd.dll
├── libEGLd.dll
├── libGLESv2d.dll
├── opengl32sw.dll
├── platforms
│   └── qwindowsd.dll
├── styles
│   └── qwindowsvistastyled.dll
└── translations├── qt_ar.qm├── ...└── qt_zh_TW.qm

依赖动态库介绍

分发运行 Qt 应用程序所需的所有 Qt DLL 和应用程序特定插件的存档必须包括以下文件:

组件文件名
可执行文件qt-demo.exe
Qt Windows 平台插件platforms\qwindows.dll
Qt Windows Vista 风格的插件styles\qwindowsvistastyle.dll
Qt 核心模块Qt6Core.dll
Qt GUI 模块Qt6Gui.dll
Qt Widgets 模块Qt6Widgets.dll

根据应用程序使用的功能,可能需要其他插件 (iconengines, imageformats)。

iconengines:

  • qsvgicon.dll:SVG 图标支持

imageformats

  • qgif.dll:提供对 GIF 图像格式的支持。
  • qicns.dll:提供对 ICNS 图像格式的支持。
  • qico.dll:提供对 ICO 图像格式的支持。
  • qjpeg.dll:提供对 JPEG 图像格式的支持。
  • qsvg.dll:提供对 SVG 图像格式的支持。
  • qtga.dll:提供对 TGA 图像格式的支持。
  • qtiff.dll:提供对 TIFF 图像格式的支持。
  • qwbmp.dll:提供对 WBMP 图像格式的支持。
  • qwebp.dll:提供对 WebP 图像格式的支持。

注意:以上imageformats列举的动态库为 Qt 5,在 Qt 6 中有所变化,缩减了一些动态库。

此外,如果采用的是 MSVC 编译器,存档必须包含以下编译器特定的库(假设为 Visual Studio 2019):

组件文件名
C 运行时vcruntime140.dll
C++ 运行时msvcp160.dll

如果使用了动态 OpenGL,则档案可能还包含:

组件文件名
OpenGL 软件渲染库opengl32sw. dll

而在Qt 5中,如果使用动态 OpenGL,还需要包含 ANGLE 和软件渲染所需的库:

组件文件名
OpenGL 软件渲染库opengl32sw. dll
ANGLE 库libEGL.dll, libGLESv2.dll
ANGLE 的 HLSL 编译器库d3dcompiler_XX.dll

如果 Qt 配置为使用 ICU,则归档文件必须包含:

ICU 组件文件名
icudtXX. dll
icuinXX. dll
icuucXX. dll

与非系统库的直接依赖关系:

QtVisual Studio 16 (2019)MinGW
Qt6Core.dll
Qt6Gui.dll
Qt6Widgets.dll
vccorlib140.dll
vcruntime140d.dll
msvcp140.dll
libwinpthread-1.dll
libgcc_s_seh-1.dll
libstdc+±6.dll

Qt 6 中增加了传输层安全性(TLS)相关的插件,即tls目录:

  • qcertonlybackend.dll:提供了一个仅用于证书处理的后端实现。它可以用于验证证书链、检查证书的有效性和处理证书相关的任务,而不实际执行加密通信。这个后端可能在不需要完整 TLS 功能的环境中使用,比如在某些测试或调试场景中。
  • qopensslbackend.dll:基于 OpenSSL 的 TLS 后端实现。OpenSSL 是一个广泛使用的开源库,提供了丰富的加密功能和协议支持,包括 SSL 和 TLS。通过使用这个后端,Qt 应用程序可以利用 OpenSSL 的功能来实现安全的网络通信。
  • qschannelbackend.dll:提供了基于 Windows 的 SChannel(Secure Channel)安全协议的 TLS 后端实现。SChannel 是 Windows 操作系统的一部分,提供了 SSL 和 TLS 协议的支持。使用这个后端,Qt 应用程序可以在 Windows 平台上利用系统自带的安全功能来实现加密通信。

Qt 插件

所有 Qt GUI 应用程序都需要一个实现 Qt 平台抽象(QPA)层的插件。对于 Windows,平台插件的名称是 qwindows.dll。此文件必须位于您的分发目录下的特定子目录(默认为 platforms)中。或者,可以调整 Qt 用于查找其插件的搜索路径。

应用程序还可能依赖于一个或多个 Qt 插件,例如打印支持插件、JPEG 图像格式插件或 SQL 驱动程序插件。确保与您的应用程序一起分发所需的任何 Qt 插件。与平台插件类似,每种类型的插件都必须位于分发目录内特定的子目录(例如 printsupport、imageformats 或 sqldrivers)中。

总结

Qt 6 的依赖库相比 Qt5 多了很多新东西,但大多可望文生义,可猜个大概意思。也可查询官方文档进行佐证。

Qt for Windows - Deployment | Qt 6.7

相关文章:

Qt windeployqt 打包的Qt动态库介绍

前言 在 Windows 平台&#xff0c;通常使用 Qt 的工具 windeployqt 将可执行文件的相关 Qt 依赖项部署到当前路径下。 Windows windeployqt 部署工具 Windows 部署工具 windeployqt 旨在自动化创建一个可部署文件夹的过程&#xff0c;该文件夹包含运行应用程序所需的 Qt 相关…...

WordPress付费进群V2主题,多种引流方法,引私域二次变现

全新前端UI界面&#xff0c;多种前端交互特效让页面不再单调&#xff0c;进群页面群成员数&#xff0c;群成员头像名称&#xff0c;每次刷新页面随机更新不重复&#xff0c;最下面评论和点赞也是如此随机刷新不重复 进群页面简介&#xff0c;群聊名称&#xff0c;群内展示&…...

【Linux】性能分析器 perf 详解(三):kmem、mem

上一篇:【Linux】性能分析器 perf 详解(二) 1、perf kmem 1.1 简介 kmem 用于跟踪/测量内核内存属性的工具,如分配、释放、碎片率等。可以帮助开发者和系统管理员理解内核内存的分配和释放模式,从而诊断内存泄漏、过度分配等问题。 功能: 跟踪内存分配和释放:监控内…...

微信小程序怎样跳转页面?

在微信小程序中&#xff0c;页面跳转通常使用 wx.navigateTo、wx.redirectTo、wx.switchTab、wx.navigateBack 以及 wx.reLaunch 等API。这些API提供了不同的页面跳转方式&#xff0c;适用于不同的场景。 以下是这些API的详细代码示例和说明&#xff1a; 1.wx.navigateTo&…...

针对SVN、GIT版本管理工具进行源代码加密保护

针对SVN、GIT版本管理工具进行源代码加密保护 在软件开发过程中&#xff0c;版本管理工具如SVN和GIT是不可或缺的组成部分&#xff0c;它们帮助团队管理源代码的变更和版本。然而&#xff0c;这些工具也面临着源代码泄露的安全风险。如果不针对数据进行加密保护&#xff0c;很…...

js条件引用

在JavaScript中&#xff0c;条件引用模块通常涉及到在运行时根据条件判断来决定是否加载某个模块。这在某些情况下非常有用&#xff0c;比如在不同环境下使用不同的模块&#xff0c;或者在某些特定条件下才需要某个模块的功能。 以下是几种在JavaScript中实现条件引用的方法&a…...

帝国CMS(EmpireCMS)漏洞复现

简介 《帝国网站管理系统》英文译为Empire CMS&#xff0c;简称Ecms&#xff0c;它是基于B/S结构&#xff0c;且功能强大而帝国CMS-logo易用的网站管理系统。 帝国CMS官网&#xff1a;http://www.phome.net/ 参考相关漏洞分析文章&#xff0c;加上更详细的渗透测试过程。 参考…...

DP:解决路径问题

文章目录 二维DP模型如何解决路径问题有关路径问题的几个问题1.不同路径2.不同路径Ⅱ3.下降路径最小和4.珠宝的最高价值5.地下城游戏 总结 二维DP模型 二维动态规划&#xff08;DP&#xff09;模型是一种通过引入两个维度的状态和转移方程来解决复杂问题的技术。它在许多优化和…...

Halcon OCR字符识别(极坐标转换,字符识别)

Halcon OCR字符识别&#xff08;极坐标转换&#xff0c;字符识别&#xff09; 代码 * 1.加载图片 *************************************************** dev_close_window () read_image (Image, ./img) get_image_size (Image, Width, Height) dev_get_window (WindowHandle…...

【管理咨询宝藏139】某大型快消集团公司多渠道销售管理体系方案

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏139】某大型快消集团公司多渠道销售管理体系方案 【格式】PDF版本 【关键词】罗兰贝格、营销咨询、战略规划 【核心观点】 - 销售体系建设主要需…...

大模型提问中包括时间的实战方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...

【算法】(C语言):堆排序

堆&#xff08;二叉树的应用&#xff09;&#xff1a; 完全二叉树。最大堆&#xff1a;每个节点比子树所有节点的数值都大&#xff0c;根节点是最大值。父子索引号关系&#xff08;根节点为0&#xff09;&#xff1a;&#xff08;向上&#xff09;子节点x&#xff0c;父节点(x…...

ffmpeg下载/配置环境/测试

一、下载 1、访问FFmpeg官方网站下载页面&#xff1a;FFmpeg Download Page&#xff1b; 2、选择适合Windows的版本&#xff08;将鼠标移动到windows端&#xff09;。通常&#xff0c;你会找到“Windows builds from gyan.dev”或者“BtbN GitHub Releases”等选项&#xff0…...

C# 异步编程详解(Task,async/await)

文章目录 1.什么是异步2.Task 产生背景3.Thread(线程) 和 Task(异步)的区别3.1 几个名词3.2 Thread 与 Task 的区别 4.Task API4.1 创建和启动任务4.2 Task 等待、延续和组合4.3 task.Result4.4 Task.Delay() 和 Thread.Sleep() 区别 5.CancellationToken 和 CancellationToken…...

qt结合vs2022安装

进入清华大学开源软件&#xff1a; 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载完成后&#xff0c;双击进行安装&#xff1a; 进入邮箱进行验证&#xff1a; 可能是因为网络问题&#xff0c;无法安装。 重新安装5.12.12版本。 安装后启动失败&#xff0c;重新…...

Kafka集群部署(手把手部署图文详细版)

1.1.1 部署zookpeer 在node02下载并解压zookeeper软件包 cd /usr/local wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz 或者&#xff1a;scp cat192.168.28.100:/home/cat/zookeeper-3.4.6.tar.gz /tmp&#xff08;注意目录&#xf…...

阿里Qwen2-72B大模型已是开源榜的王者,为什么还要推出其他参数模型,被其他模型打榜?

6 月 27 日&#xff0c;全球知名的开源平台 Hugging Face 的联合创始人兼首席执行官 Clem 在社交平台激动宣布&#xff0c;阿里 Qwen2-72B 成为了开源模型排行榜的王者。 这是一件大好事&#xff0c;说明了我们在大模型领域从先前的追赶&#xff0c;逐渐走向了领导&#xff0c;…...

7.基于SpringBoot的SSMP整合案例-表现层开发

目录 1.基于Restfu1进行表现层接口开发 1.1创建功能类 1.2基于Restful制作表现层接口 2.接收参数 2使用Apifox测试表现层接口功能 保存接口&#xff1a; 分页接口&#xff1a; 3.表现层一致性处理 3.1先创建一个工具类&#xff0c;用作后端返回格式统一类&#xff1a;…...

【server】3、注册中心与配置中心

1、服务注册与发现 1.1、consul 1.1.1 是什么 官网&#xff1a; Consul by HashiCorp spring-cloud-consul: Spring Cloud Consul :: Spring Cloud Consul gitHub 官网 &#xff1a;GitHub - hashicorp/consul: Consul is a distributed, highly available, and data cent…...

【大数据】—量化交易实战案例(海龟交易策略)

声明&#xff1a;股市有风险&#xff0c;投资需谨慎&#xff01;本人没有系统学过金融知识&#xff0c;对股票有敬畏之心没有踏入其大门&#xff0c;今天用另外一种方法模拟炒股&#xff0c;后面的模拟的实战全部用同样的数据&#xff0c;最后比较哪种方法赚的钱多。 海龟交易…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...