问题:
自己电脑能运行经过Enigma Virtual Box打包过的exe文件,别人电脑提示缺少qt5charts.dll
原因:打包时候文件没有选够。自己电脑能运行,是因为自己电脑环境已经有了相关的库,没有打包进去,它会到系统里面去找(猜测应该是这样的),别人电脑就不行了,找不到。
别人电脑打不开的打包过程:
选择好封包的主程之后,直接执行了执行封包,文件那里没有进行任何选择,当时以为,软件会自动把他们都包含进去。因此什么都没有选择,封包完成,大小1.25mb,复制到自己电脑的其他位置,也能正常运行。发给别人就打不开了。
解决:
首先点击增加文件,选择exe文件根目录下的所有dll文件,
选择完文件,点击确认:
然后新建文件夹;platforms;
选择增加--增加文件:选择platforms下的文件;添加完成,如图所示
文件选项里面勾选;压缩文件;执行封包,等待封包完成。得到exe文件25mb。发给别人的电脑,可以正常打开。这种方式是看别人教程封包的,实际上我的exe以依赖的库还有其他几个文件夹,这种方式暂时也能用,后面还是把exe整个文件夹打包。
最稳妥:
整个exe所在的文件整体进行打包,除非文件特别大的时候,再进行选择排除,文件不大的时候,整体打包也方便,不容易出错。
整个exe文件夹打包,选择增加文件夹,选择exe的根目录,点击确认,然后就把整个文件夹及其文件选择进来了,然后执行封包。得到的文件28mb。
当时之所以没有选择文件和库一起打包,是因为什么都不选打包1.25mb,选择了28mb,在自己的电脑上又都能运行,就选择占用空间小的。
选择release版本进行打包,选择压缩文件都可以减小打包后的文件大小,但是库一定要包含完整。
你的情况其实非常典型,原因总结如下:
核心原因:
所谓“封装好的 exe 文件”,如果只是生成了 xxx.exe
,但没有把 依赖的 Qt 库文件 一起打包进去,实际上这并不叫真正“封装好”。
你自己的电脑上能正常运行,是因为你本地开发环境里:
已经安装了完整的 Qt
环境变量、系统路径里已经包含 Qt 的动态库(如 Qt5Charts.dll
、Qt5Core.dll
、Qt5Widgets.dll
等)
所以 exe 能找到依赖库。
而别人的电脑没有 Qt 环境,也没有这些 dll,程序就会报:
Cannot load library Qt5Charts.dll
标准解决办法:
你必须使用 Qt 官方提供的打包工具:windeployqt
,它会自动:
分析你的 exe 需要哪些 Qt 依赖库
把需要的 dll、插件、platform 文件夹等一起打包到 exe 同目录下
正确操作步骤:
-
确认你的 exe 是 Release 版本(Debug 版不能随便发别人用)
-
打开 Qt 命令行工具(Qt Creator 自带)
-
进入 exe 所在目录
-
执行命令:
windeployqt your_program.exe
-
完成后,exe 所在目录会多出一堆 dll 和文件夹,这些都必须带上,整体文件夹一起发给别人运行
总结一句话:
你的 exe 只是生成了程序主体,Qt 依赖的动态库没有打包进去,别人电脑自然运行不了。
用 windeployqt
正确打包,确保依赖齐全,拷贝整个打包好的文件夹发给别人,才能正常运行。
参考资料:
如何将Qt项目打包成可执行文件(exe)_qt如何生成exe文件-优快云博客
Qt程序打包(使用Enigma Virtual Box和BoxedApp Packer封包) - findumars - 博客园