码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Qt程序打包成一个单独exe的方法


    目录

    Qt程序打包成一个单独exe的方法

    程序发布

    程序打包

    问题


    Qt程序打包成一个单独exe的方法

    Qt程序发布及打包,同时修改可执行文件的图标。本教程使用Qt自带的 windeployqt 工具外加Enigma Virtual Box打包工具。首先需要知道的是,Qt程序发布需要的程序是用 Release 方式编译的。下面看一下具体的操作。

    改变exe的图标
    1、下载一个.ico格式的图标(如:exe_ico.ico),将exe_ico.ico复制到工程目录下。
    2、工程目录下新建一个空白txt文档,文档内添加如下内容
    IDI_ICON1 ICON DISCARDABLE "exe_ico.ico"
    3、将文档后缀修改为.rc(如:exe_ico.rc)
    4、在工程的pro文件添加如下内容
    RC_FILE = exe_ico.rc
    另注:使用VS+Qt的开发方式:在编辑器上的项目目录(Resource Files)添加exe_ico.rc文件即可。
    5、重新编译程序,即可发现生成的程序图标变成了exe_ico.ico

    程序发布

    1、首先将Release方式生成的exe复制到一个单独的文件夹下,如E盘根文件下的demo文件夹内。
    2、开始菜单找到Qt目录下的Qt 5.5 for Desktop (MinGW 4.9.2 32 bit)打开命令行;
    3、命令行进入步骤1新建的demo目录内

    进入demo文件夹
    4、输入windeployqt 项目名.exe(如windeployqt QtTest.exe)

     这里写图片描述
    5、进行到这,Qt程序所需要的库都添加完成。但是有一部分是用不到的,想删除的可以用程序依赖关系查看软件来查看哪些文件用不到,感兴趣的自己去百度吧。

    或者 1、将Release方式生成的exe复制到一个单独的文件夹下,如D盘根文件下的D:\SW_DEV\QT\Release_exe_temp文件夹内。

    2、打开命令行工具cmd,进入windeployqt.exe目录(C:\Qt\Qt5.11.3\5.11.3\mingw53_32\bin>windeployqt.exe),使用 windeployqt 对生成的exe 文件进行打配置动态库文件; 

    3、C:\Qt\Qt5.11.3\5.11.3\mingw53_32\bin>windeployqt.exe D:\SW_DEV\QT\Release_exe_temp\MODBUS.exe

    程序打包

    安装Enigma virtual box工具(安装过程一直next就行)

    Enigma virtual box官方链接:https://enigmaprotector.com/en/downloads.html

    1、打开提前安装好的Enigma Virtual Box。具体操作如下:
    这里写图片描述

     2、如上图
    1)浏览打开demo下的Test.exe文件


    2)点击增加,选择递归添加文件,选中demo文件夹点击确定


    3)点击文件选项,选中压缩文件


    4)点击执行封包。


    3、将封包后的程序复制到其他地方,打开测试,结束。

    问题

    1. 之前打包很顺利,没有出现问题。这次换了一台电脑,就出现了问题:

    打包完成后,程序无法运行,报错:

     百度了一会儿,有人说是因为:

    使用enigmavb打包程序时,包含的根目录应该与待封包的主程序同级目录,不然会报错Cannot load library QT5Core.dll
    同样的程序,下图右边不报错,左边报错

    在这里插入图片描述

     我打包时不存在这个问题,还是会报错,所以不是这个原因;

    最终确认是环境变量的问题:

    因为安装QT时没有设置环境变量

    开始-计算机-右键-属性-高级系统设置,高级选项卡-环境变量-系统变量

    在系统变量里面找到Path,点击编辑,在弹出的对话框中点击新建,根据自己的QT安装位置,输入类似C:\Qt\Qt5.11.3\5.11.3\mingw53_32\bin,后一路点击确定即可。

    设置完就可以运行了
     

    2.  给到客户之后,反馈还是不行:

     ps:之前我一直是在开发的电脑上调试的,问题1就处在那个时候,电脑有安装QT软件;问题2现在是客户的电脑,是没装过QT软件的;所以问题是:

    把 Enigma Virtual Box 打包过的 exe 放到另一个电脑使用,打开exe会报错:cannot load library Qt5Core.dll
    (而实际上使用 Enigma Virtual Box 打包时,已经包含了 Qt5Core.dll 库)

    查了一下,原因是:

    • 这个并不是缺少 Qt5Core.dll 的原因,也不是这个库有问题。
    • 是由于 【问题解决】由于找不到libgcc_s_dw2-1.dll 、libwinpthread.dll、libstdc+±6.dll,无法继续执行代码。重新安装程序可能会解决此问题。 这个问题导致的。
    • 缺少了 libgcc_s_dw2-1.dll,libwinpthread.dll,libstdc++-6.dll 这三个动态库,打包后却报错 cannot load library Qt5Core.dll ,分析可能是因为 Qt5Core.dll 依赖以上的库才能运行吧。

    解决方法: 

    从 Qt5.12.0\5.12.0\mingw73_64\bin(版本不同目录不同) 目录下把这 libgcc_s_dw2-1.dll,libwinpthread.dll,libstdc++-6.dll 三个动态库拷贝过来,再使用Enigma Virtual Box 打包的exe就不会报错了。

    修改前和修改后目录对比:

     重新打包之后,果然可以运行了

     这部分参考:https://javonpeng.blog.csdn.net/article/details/121926624?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-121926624-blog-125670700.235%5Ev28%5Epc_relevant_t0_download&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-121926624-blog-125670700.235%5Ev28%5Epc_relevant_t0_download&utm_relevant_index=2icon-default.png?t=N2N8https://javonpeng.blog.csdn.net/article/details/121926624?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-121926624-blog-125670700.235%5Ev28%5Epc_relevant_t0_download&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-121926624-blog-125670700.235%5Ev28%5Epc_relevant_t0_download&utm_relevant_index=2

  • 相关阅读:
    北斗导航 | 中长基线 RTK 定位研究(BDS-3)
    Java集合
    Himall商城LinqHelper帮助类(2)
    AD9371 官方例程裸机SW 和 HDL配置概述(三)
    YB6502 5V输入双节串联磷酸铁锂电池升压充电芯片
    Flutter 最有用的 5 个优秀的依赖包
    Python爬虫入门
    B端系统:导航机制设计,用户体验提升的法宝
    Ubuntu中简单配置网络和安装pycharm
    前端权限管理方案之精确到按钮级别
  • 原文地址:https://blog.csdn.net/childbor/article/details/125283893
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号