概述
前情提要
众所周知,Qt
直接编译产生的exe
文件很难在其他电脑中运行
其根源在于Qt
采用动态链接,所依赖的函数与类等,封装在dll(动态链接库·Dynamic Link Library)
中
所以,单单复制exe
文件,会导致缺失dll依赖库
,致使无法正确运行
知道了问题所在,解决方法也是一目了然,只要将exe
同dll依赖库
一齐打包即可
由于手动寻找依赖库极其不便,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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复