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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/866229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 启动流程一

SpringBoot启动流程一 我们首先创建一个新的springboot工程 我们不添加任何依赖 查看一下pom文件 我们创建一个文本文档 记录我们的工作流程 我们需要的是通过打断点实现 我们首先看一下启动响应类 package com.bigdata1421.start_up;import org.springframework.boot.Spr…

音视频流媒体视频平台LntonAIServer视频监控平台工业排污检测算法

在当今社会&#xff0c;环境保护和可持续发展已成为全球关注的焦点。工业生产作为经济发展的重要支柱&#xff0c;其对环境的影响不容忽视。因此&#xff0c;如何有效地监控和管理工业排污&#xff0c;成为了一个亟待解决的问题。LntonAIServer工业排污检测算法应运而生&#x…

开发电商ERP系统需要接入哪些平台API?

跟随全渠道发展趋势&#xff0c;很多实体商家开设电商店铺&#xff0c;为消费者提供便捷的购物体验&#xff0c;增强消费者的满意度&#xff0c;同时也提升了企业自身的市场竞争力。为了满足商家业务拓展需求&#xff0c;很多原本主要服务于实体商贸企业的ERP服务商&#xff0c…

CSS filter(滤镜)属性,并实现页面置灰效果

目录 一、filter&#xff08;滤镜&#xff09;属性 二、准备工作 三、常用的filter属性值 1、blur(px) 2、brightness(%) 3、contrast(%) 4、grayscale(%) 5、opacity(%) 6、saturate(%) 7、sepia(%) 8、invert(%) 9、hue-rotate(deg) 10、drop-shadow(h-shadow v…

编译rust程序,并让它依赖低版本的GLIBC库

在linux环境下编译rust程序,编译好的程序会依赖你当前系统的GLIBC库,也就是说你的程序无法在使用更低版本GLIBC库的linux系统中运行。 查看当前系统的GLIBC版本: strings /lib64/libc.so.6 | grep GLIBC 为了让编译的程序依赖比较低版本的GLIBC库,我们最好在centos7下编译…

JavaScript基础-函数(完整版)

文章目录 函数基本使用函数提升函数参数arguments对象&#xff08;了解&#xff09;剩余参数(重点)展开运算符(...) 逻辑中断函数参数-默认参数函数返回值-return作用域(scope)全局作用域局部作用域变量的访问原则垃圾回收机制闭包 匿名函数函数表达式立即执行函数 箭头函数箭头…

【机器学习】Google开源大模型Gemma2:原理、微调训练及推理部署实战

目录 一、引言 二、模型简介 2.1 Gemma2概述 2.2 Gemma2 模型架构 三、训练与推理 3.1 Gemma2 模型训练 3.1.1 下载基座模型 3.1.2 导入依赖库 3.1.3 量化配置 3.1.4 分词器和模型实例化 3.1.5 引入PEFT进行LORA配置 3.1.6 样本数据清洗与加载 3.1.7 模型训练与保…

SCI一区TOP|徒步优化算法(HOA)原理及实现【免费获取Matlab代码】

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;SO Oladejo受到徒步旅行启发&#xff0c;提出了徒步优化算法&#xff08;Hiking Optimization Algorithm, HOA&#xff09;。 2.算法原理 2.1算法思想 HOA灵感来自于…

小试牛刀-Solana合约账户详解

目录 一.Solana 三.账户详解 3.1 程序账户 3.2 系统所有账户 3.3 程序派生账户(PDA) 3.4 Token账户 四、相关学习文档 五、在线编辑器 Welcome to Code Blocks blog 本篇文章主要介绍了 [Solana合约账户详解] ❤博主广交技术好友&#xff0c;喜欢文章的可以关注一下❤ …

【人工智能】--生成对抗网络

个人主页&#xff1a;欢迎来到 Papicatch的博客 课设专栏 &#xff1a;学生成绩管理系统 专业知识专栏&#xff1a; 专业知识 文章目录 &#x1f349;引言 &#x1f349;GAN 的基本原理 &#x1f348;生成器&#xff08;Generator&#xff09; &#x1f348;判别器&…

sql语句练习注意点

1、时间可以进行排序&#xff0c;也可以用聚合函数对时间求最大值max&#xff08;时间&#xff09; 例如下面的例子&#xff1a;取最晚入职的人&#xff0c;那就是将入职时间倒序排序&#xff0c;然后limit 1 表&#xff1a; 场景&#xff1a;查找最晚入职员工的所有信息 se…

Pinia:Vue 2 和 Vue 3 中更好用的状态管理框架

前言 还在用Vuex? 在Vue应用程序的开发过程中&#xff0c;高效且易于维护的状态管理一直是开发者关注的核心问题之一。随着Vue 3的发布&#xff0c;状态管理领域迎来了一位新星——Pinia&#xff0c;它不仅为Vue 3量身打造&#xff0c;同时也向下兼容Vue 2&#xff0c;以其简…

PostgreSQL 在Windows下保姆级图文安装教程

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

The Plant Cell:DAP-seq技术助力揭示MdWRKY75调控苹果耐热性的分子机制

2024年6月12日&#xff0c;西北农林科技大学作物抗逆与高效生产全国重点实验室/园艺学院苹果抗逆与品质改良创新团队马锋旺教授/李超课题组在植物学知名期刊The Plant Cell&#xff08;影响因子10&#xff09;在线发表了题为“The MdHSC70-MdWRKY75 module mediates basal appl…

微信小程序 调色板

注意&#xff1a;是在uniapp中直接使用的一个color-picker插件&#xff0c;改一下格式即可在微信小程序的原生代码中使用 https://github.com/KirisakiAria/we-color-picker 这是插件的地址&#xff0c;使用的话先把这个插件下载下来&#xff0c;找到src&#xff0c;在项目创…

九、函数的声明和定义

函数声明&#xff1a; 1. 告诉编译器有一个函数叫什么&#xff0c;参数是什么&#xff0c;返回类型是什么。但是具体是不是存在&#xff0c;函数 声明决定不了。 2. 函数的声明一般出现在函数的使用之前。要满足先声明后使用。 3. 函数的声明一般要放在头文件中的。 定义的函…

股价持续低迷,业绩颓势不减,冀光恒难救平安银行?

文&#xff5c;新熔财经 作者&#xff5c;宏一 周一一上班&#xff0c;就听到旁边的同事感慨今年股市行情很不错&#xff0c;尤其是银行股&#xff0c;上半年累计上涨了17.02%&#xff0c;是涨幅最大的板块。 听到这里&#xff0c;我美滋滋地打开自己的账户&#xff0c;结…

spdlog一个非常好用的C++日志库(四): 源码分析之logger类

目录 1.简介 2.类图关系 3.logger数据成员 4.logger函数成员 4.1.构造与析构 4.1.1.构造函数 4.1.2.拷贝构造、移动构造 4.2.交换操作 4.3.log()记录日志消息 4.3.1.格式串 4.3.2.普通字符串 4.3.3.日志级别 4.3.4.宽字符支持 4.4.sink_it_&#xff1a;将log消息…

PLC工作原理

PLC&#xff08;可编程逻辑控制器&#xff09;的工作原理简述为&#xff1a;集中采样、集中输出、周期性循环扫描。 西门子PLC 一、集中采样 顺序读取所有输入端子的通断状态&#xff0c;并将所读取的信息存到输入映像寄存器中&#xff0c;此时输入映像寄存器被刷新&#xff…

三坐标测量机:柔性生产制造中的高精度测量解决方案

柔性生产制造是制造业的核心竞争力之一。它强调生产线的灵活性和适应性&#xff0c;以满足市场对产品多样化和个性化的需求。在当今快速变化的工业环境中&#xff0c;随着消费者对产品个性化和定制化需求的增加&#xff0c;柔性生产制造和三坐标测量机的结合&#xff0c;为智能…