码农知识堂 - 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

  • 相关阅读:
    Git命令全集
    高级IO多路转接之select、poll、epoll
    场景应用:利用Redis实现分布式Session
    DASCTF2022.07赋能赛 web 复现
    cmd命令行设置 windows 设置环境变量
    JAVA学习(5)-全网最详细~
    Revit插件“有求必应”的【批量喷头】生成喷头
    【CSS】H4_基础
    微信登录——授权登录获取用户信息
    数据化管理洞悉零售及电子商务——零售策略中的数据化管理
  • 原文地址:https://blog.csdn.net/childbor/article/details/125283893
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号