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

使用windeployqt打包时遇到系统错误,原因是未在Qt环境变量下运行。正确做法是在Qt提供的命令行环境下执行,通过qtenv2.bat设置PATH。文章详细分析问题并提供解决方案,包括如何从Qt环境启动命令行和一键打包方法。
摘要由CSDN通过智能技术生成

很多同学使用工具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实现一键打包的方法】:
 

====================================================

地址如下:

windeployqt实现一键打包_zchill的博客-CSDN博客

====================================================

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 缺少msvcp140.dll文件可能会导致某些程序无法正常运行。解决方法如下: 1. 重新安装相关程序:如果缺少msvcp140.dll文件是由于某个程序的安装出现问题,可以尝试重新安装该程序。 2. 下载并安装Visual C++ Redistributable:msvcp140.dll文件是Visual C++ Redistributable的一部分,可以从Microsoft官网下载并安装Visual C++ Redistributable。 3. 更新Windows系统:有时缺少msvcp140.dll文件是由于Windows系统更新不完整或出现问题,可以尝试更新Windows系统。 4. 从其他电脑复制msvcp140.dll文件:如果其他电脑上有msvcp140.dll文件,可以将该文件复制到缺少该文件的电脑上。 5. 使用DLL修复工具:可以使用一些DLL修复工具来修复缺少msvcp140.dll文件的问题。但是需要注意,使用不可信的DLL修复工具可能会导致更多的问题。 ### 回答2: msvcp140.dll是微软Visual C++ Redistributable安装包的一部分,它包含了C++标准库的代码。如果你的电脑上缺少这个文件,那么在运行某些程序时就会出现错误提示“找不到msvcp140.dll”或者“msvcp140.dll丢失”等。 缺少msvcp140.dll文件的解决方法有以下几种: 1. 重新安装Visual C++ Redistributable包。你可以到微软官网上下载并安装这个包,或者尝试重装之前有问题的程序,在某些情况下,安装程序会自行安装这个包。 2. 可以从同样运行正常的电脑上,将msvcp140.dll文件拷贝到出现问题的电脑上相同的文件夹中。这种方法常见于一些游戏玩家之间,但需要注意的是,这种方法并不是百分之百的有效,因为不同的电脑上可能有不同版本的msvcp140.dll,另外拷贝dll文件也存在安全隐患,可能会感染计算机病毒。 3. 使用系统还原功能。如果你在出现问题之前曾经做过系统还原,可以尝试把系统还原到正常的状态。 4. 在Windows系统中使用命令行工具,可以执行sfc /scannow命令,这个命令会自动扫描并修复一些系统文件错误。 总之, ms vcp140.dll丢失是一件比较常见的问题,但是其解决方法也比较简单。如果尝试以上解决方案依然无法解决此问题,可能需要进一步查找原因,或者联系计算机硬件专业人员进行处理。 ### 回答3: msvcp140.dllWindows操作系统中的一个动态链接库文件,它是Microsoft Visual C++运行库中的一个重要组成部分。如果在运行某些程序时提示缺少msvcp140.dll,则意味着该程序无法正常运行,需要进行修复操作,否则将会受到一定的影响。 缺少msvcp140.dll解决方法方法一:重新安装Microsoft Visual C++ 运行库 您可以从Microsoft官方下载中心下载该运行库的最新版本,重新安装以解决问题。具体步骤如下: 1.打开微软官网并进入Microsoft Visual C++ 运行库下载中心。 2.根据操作系统版本选择对应的运行库版本并下载。 3.下载完成后,双击运行并按照提示操作安装。 方法二:修复系统文件 msvcp140.dll文件存在问题时,可能是由于系统文件损坏导致的。进行系统文件的修复能够修正该问题。下面是修复系统文件的步骤: 1.按下Win+X,选择“命令提示符(管理员)”。 2.在命令提示符中输入“sfc /scannow”命令,并按下Enter键。 3.等待片刻,系统将自动扫描系统中的文件并进行修复操作。 方法三:重装软件 如果该问题是某个应用程序的问题,那么最简单的解决方法是卸载并重新安装该程序。 总之,如果缺少msvcp140.dll文件,建议优先选择重新安装Microsoft Visual C++运行库来解决这个问题。如果该方法不能解决问题,可以通过修复系统文件或者重新安装软件来解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zchill

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

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

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

打赏作者

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

抵扣说明:

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

余额充值