我是靠谱客的博主 粗犷未来,最近开发中收集的这篇文章主要介绍windeployqt发布项目 为何总是缺少dll,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前情提要

众所周知,Qt直接编译产生的exe文件很难在其他电脑中运行

其根源在于Qt采用动态链接,所依赖的函数与类等,封装在dll(动态链接库·Dynamic Link Library)

所以,单单复制exe文件,会导致缺失dll依赖库,致使无法正确运行

知道了问题所在,解决方法也是一目了然,只要将exedll依赖库一齐打包即可

由于手动寻找依赖库极其不便,Qt贴心地提供了部署工具windeployqt

Usage・偽

[由于windeployqt现已加入Windows豪华环境变量]

所以只要在CMD中改变(cd·Change Directory)工作目录至exe所在目录

并执行windeployqt test.exe

便会自动将依赖文件(包括dll和图标等众文件)拷贝至exe所在目录

此时,打包为压缩包并一齐发布即可

Pause

真有这么简单?

是的,我就是这么干的,然后课上Presentationの時疯狂“缺失dll”

直接社死

分析

这究竟是人性的扭曲还是道德的沦丧

这显然是 复制了但没有完全复制

社死的我回到座位上开始找度娘

度娘的做法和我稍稍、削削有那么一点点 不同

不是Windows自带CMD而是Qt提供的命令行环境:Qt 5.14.2 (MinGW 7.3.0 64-bit)
请添加图片描述

进两步分析

那莫,这俩究竟有何区别,造成最终拷贝的dll数量不相同呢

我们先来看看 Qt 5.14.2 (MinGW 7.3.0 64-bit) 究竟是何方神圣

实际上这玩意儿是个link(快捷方式)

请添加图片描述
注意目标(T)处代码

C:WindowsSystem32cmd.exe /A /Q /K E:Qt5.14.25.14.2mingw73_64binqtenv2.bat

实际上是调用CMD执行了qtenv2.bat(批处理文件)

那么,猫腻也许就藏在这个bat文件中

我们来看看其中的内容:

@echo off
echo Setting up environment for Qt usage...
set PATH=E:Qt5.14.25.14.2mingw73_64bin;E:/Qt5.14.2/Tools/mingw730_64bin;%PATH%
cd /D E:Qt5.14.25.14.2mingw73_64

其实真正能够造成影响的是第3行的set PATH中的第二个path(E:/Qt5.14.2/Tools/mingw730_64bin)

因为第一个path其实已经默认加入了环境变量 无伤大雅

path(E:/Qt5.14.2/Tools/mingw730_64bin)中并不在环境变量中,导致一般的CMD方式无法读取其中的dll,导致dll缺失

Last And Absolutely Last

真相了,就缺这么一个目录,少了一堆dll

下次记得用Qt命令行环境

Peace

最后

以上就是粗犷未来为你收集整理的windeployqt发布项目 为何总是缺少dll的全部内容,希望文章能够帮你解决windeployqt发布项目 为何总是缺少dll所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部