Windeployqt 打包,缺少DLL 的原因分析,解决方法

news2024/10/1 21:34:48

很多同学使用工具windeployqt进行打包发布后,运行exe文件时,还是会出现下图所示的系统错误提示,这种情况就表示相关的DLL 库文件没有被正确打包。可是windeployqt明确显示运行正常啊,难道是QT自家的windeployqt这个工具有bug?显然不可能。下面就来分析一下问题的原因,并给出解决问题的详细步骤,相信大家看完后就会豁然开朗。
在这里插入图片描述
其实产生这个问题的原因很简单,就是很多同学在打包时,都是直接在windows 环境下打开cmd 命令行,然后执行指令windeployqt,运行时就会出现上图的错误。正确的做法应该是在QT提供的命令行环境下执行windeployqt,这两者有什么区别呢?

如下图步骤,在windows桌面搜索栏输入qt,按上下键选择相应的版本,此处选择Qt 6.4.1 for Desktop (MinGW 11.2.0 64-bit),然后选择【打开文件位置】
在这里插入图片描述

在打开的目录下面有一个相应的快捷方式图标:Qt 6.4.1 for Desktop (MinGW 11.2.0 64-bit)
在这里插入图片描述

右键点击此快捷文件,选择【属性】:
在这里插入图片描述

查看目标栏内容,此处内容为:

C:\Windows\System32\cmd.exe /A /Q /K E:\Qt\Qt6.4\6.4.1\mingw_64\bin\qtenv2.bat

看到这里就知道了,原来从QT环境打开命令行时,执行了一个批处理文件 qtenv2.bat,那这个文件里面干了什么呢?

在E:\Qt\Qt6.4\6.4.1\mingw_64\bin\ 目录,打开qtenv2.bat,其内容如下:

@echo off
echo Setting up environment for Qt usage...
set PATH=E:\Qt\Qt6.4\6.4.1\mingw_64\bin;E:\Qt\Qt6.4\Tools\mingw1120_64\bin;%PATH%
cd /D E:\Qt\Qt6.4\6.4.1\mingw_64

此处设置了windeployqt 运行时的环境变量PATH,它指定了2个bin目录,打包需要的DLL 库文件就在这2个bin目录里面。所以,从windows 环境直接打开命令行cmd.exe 时,是没有进行这个环境变量设置的,或者在其他地方设置了,但是可能没有生效。

接下来,我们从QT 进入命令行,验证一下。下图中,直接点击选项 2【Qt 6.4.1 for Desktop (MinGW 11.2.0 64-bit),进入命令行环境
在这里插入图片描述

在命令行手动输入打包指令,回车运行…
在这里插入图片描述

指令运行完毕后如下图:红框3 显示指令执行正常,红框1,2 就是新增加的库文件。
在这里插入图片描述

此时,双击运行LangSwitch.exe,如下图所示,运行正常,说明整个打包的过程是正确的。
在这里插入图片描述

通过以上分析和验证,可以得出结论:

从windowds 直接打开cmd 进入命令行时,没有设置环境变量PATH,windeployqt 自然就无法找到相应的DLL 库文件,最后导致错误发生。

所以,正确的做法应该是从QT环境进入命令行,然后再手动输入执行windeployqt 就不会有问题了.


现在DLL缺失的问题是解决了,但是如果每次执行windeployqt 打包时,都要手动输入类似下面的一长串字符,真的是有点烦。

E:\Qt\Qt6.4\6.4.1\mingw_64\bin>windeployqt.exe E:\Qt\Qt6source\CH15\CH1502\LangSwitch\release\LangSwitch.exe

那有没有什么其它的工具,避免这个烦人的事情呢? 答案是:QT没有

然鹅,但是,但是,,,,,

QT没有,不代表我们就要一直受这个鸟气,经过本人研究,还真的琢磨出一个曲线救国的好办法,不需要打开命令行cmd,也不需要输入任何字符,只要点一下鼠标,就可以一键完成打包的所有动作,也就是说,只要是有手的人,就可以完成打包,真正的傻瓜式操作,绝对可靠。有兴趣的同学,请参考本人以下链接文章【windeployqt实现一键打包的方法】:

https://blog.csdn.net/zchill/article/details/128974201

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

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

相关文章

2024年浙大MBA创客班项目提面如何申请?

2024年浙大MBA创客班提面如何申请?在目前的提前批面试申请过程中不少考生都不太清楚,专注浙大的杭州达立易考教育本期将项目的提前批面试和常规批复试申请基本流程和关键信息整理出来,帮助考生更精准的进行面试准备。 一、浙大MBA创客班项目…

基于比较排序算法总结

1.数据无法全部放入内存 2.数据以数据流形式

操作系统2(多处理器编程)

一、并发 1.操作系统是最早的并发程序之一 2.并发的基本单位:线程 共享内存的多个执行流 执行流拥有独立的堆栈/寄存器共享全部的内存(指针可以互相引用) 3.实现原子性 lock(&lk)unlock(&lk) 实现临界区(critical section)之间…

keepalived脑裂现象

Keepealived最常见的问题是会出现脑裂现象: Master一直发送心跳消息给backup主机,如果中间的链路突然断掉,backup主机将无法收到master主机发送过来的心跳消息(也就是vrrp报文),backup这时候会立即抢占mas…

Snmputil和Snmputilg工具的下载和基本使用 SNMP协议 Windows系统SNMP服务的安装教程

⬜⬜⬜ ---🟧🟨🟩🟦🟪 (*^▽^*)欢迎光临 🟧🟨🟩🟦🟪---⬜⬜⬜ ✏️write in front✏️ 📝个人主页:陈丹宇jmu 🎁欢迎各位→…

现代CMake高级教程 - 第 7 章:变量与缓存

双笙子佯谬老师的【公开课】现代CMake高级教程课程笔记 第 7 章:变量与缓存 重复执行 cmake -B build 会有什么区别? ❯ cmake -B build -- The C compiler identification is GNU 11.3.0 -- The CXX compiler identification is GNU 11.3.0 -- Detec…

C++:分治算法之输油管道问题

目录 描述 输入 输出 输入样例 输出样例 分析 代码 运行结果 描述 ¢ 某石油公司计划建造一条 由东向西 的主输油管道。该管道要穿过一个有n口油井的油田。从每口油井都要有一条输油管道沿最短路经(或南或北)与主管道相连。 ¢ 如果给定…

如何区分GPT3.5和4?

切换模型 前两天申请的GPT 4的API调用权限终于申请下来了。 这两天我也是抓紧开发,让自己搭建的国内网站(aichatroom.cn)可以快速支持上使用GPT 4。 GPT 3.5和GPT4的区别 GPT-3.5 和 GPT-4 分别代表了 OpenAI 发布的两个不同版本的自然语言处…

现代CMake高级教程 - 第 4 章:对象的属性

双笙子佯谬老师的【公开课】现代CMake高级教程课程笔记 第 4 章:对象的属性 除了 POSITION_INDEPENDENT_CODE 还有哪些这样的属性? add_executable(main main.cpp)set_property(TARGET main PROPERTY CXX_STANDARD 17) # 采用 C17 标准进行编译&am…

STC15W104 8脚单片机串口下载程序

单片机串口下载是一种常见的单片机程序下载方式,它通过串口线连接单片机的串口引脚和电脑的串口接口实现。下面是单片机串口下载的基本原理和操作方法: 原理 确定下载模式:大多数单片机芯片都支持串口下载模式,需要在程序中设置…

常识性概念图谱建设与应用

目录 一、知识图谱背景介绍 (一)基本背景 (二)与NLP的关系 (三)常识性概念图谱的引入对比 二、常识性概念图谱介绍 (一)常识性概念图谱关系图示例 (二&#xff09…

深度学习-tensorflow 使用keras进行深度神经网络训练

概要 深度学习网络的训练可能会很慢、也可能无法收敛,本文介绍使用keras进行深度神经网络训练的加速技巧,包括解决梯度消失和爆炸问题的策略(参数初始化策略、激活函数策略、批量归一化、梯度裁剪)、重用预训练层方法、更快的优化…

linux进程描述指令:ps与top

这里写自定义目录标题 一 ps指令1 ps -aux2. ps -a3. ps -u4.ps -x 二 top指令1 top2 top -d 时间3. top -i4 top -p ID 一 ps指令 1 ps -aux 显示系统中的所有进程 PID就是进程的唯一编号,操作系统书里有一个PCD的概念,就是一个标识性的控制单元 [ro…

学系统集成项目管理工程师(中项)系列16b_风险管理(下)

1. 规划风险应对 1.1. 针对项目目标,制订提高机会、降低威胁的方案和措施的过程 1.2. 制订风险应对措施 1.3. 制订风险应对计划 1.4. 次生风险是实施风险应对措施的直接结果 1.5. 应对措施必须与风险的重要性相匹配,能经济有效地应对挑战 1.5.1. 【…

项目管理-计算专题(三点估算、PERT估算)

基本概念 通过考虑估算中的不确定性和风险,可以提高活动持续时间估算的准确性。这个概念源自计划评审技术(PERT)。PERT使用三种估算值来界定活动持续时间的近似区间: 最可能时间(tM):基于最可能获得的资源、最可能取得的资源生产率、对资源可用时间的现…

C语言CRC-16 MODBUS格式校验函数

C语言CRC-16 MODBUS格式校验函数 CRC-16校验产生2个字节长度的数据校验码,通过计算得到的校验码和获得的校验码比较,用于验证获得的数据的正确性。基本的CRC-16校验算法实现,参考: C语言标准CRC-16校验函数。 不同应用规范通过对…

Simulink 自动代码生成电机控制:弱磁控制从仿真到硬件开发板验证实验

目录 前言 仿真 生成代码在硬件上运行 总结 前言 测试了一个新的小电机,24V只能跑2000RPM左右,在此基础上测试一下弱磁控制,由于MTPA只适用于表贴电机,测试效果不能直观看出来,一般是通过测试效率。而前馈解耦的响…

【Paper】2019_DoS/数据注入攻击下基于一致性的信息物理系统安全性研究_曹雄

2019_DoS/数据注入攻击下基于一致性的信息物理系统安全性研究_曹雄 文章目录 第2章 拒绝服务攻击下多智能体系统安全性研究2.1 问题描述2.1.1 系统模型2.1.2 拒绝服务攻击模型 2.2 安全估计与一致性分析2.4 数值仿真2.4.1 观测器网络受到攻击下的结果及分析2.4.1.1 线性多智能体…

视频分享平台PeerTube的搭建

老苏下载了吴恩达的 Prompt for developer 课程,不管是否有兴趣,都可以看看,早晚我们都得学会使用 ChatGPT 虽然课程对话是英文,但有中文字幕,课程地址:https://www.aliyundrive.com/s/H3CpaapD87Z 这个软…

使用ChatGPT+Xmind一键生成思维导图,简直泰裤辣

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…