Qt打包成为exe遇到的问题及其解决方法

news2024/10/6 18:32:46

Qt打包成为exe遇到的问题及其解决方法

文章目录

  • Qt打包成为exe遇到的问题及其解决方法
    • 0. 前言
    • 1. 使用Release编译工程
    • 2. 利用windeployqt工具来找出和复制依赖项
    • 3. 解决 Qt Location /Qt Positioning is not installed
    • 4. 利用Enigma virtual box打包 `.exe`程序
    • 5. dependency walker工具等
    • 6. 小结

0. 前言

问题描述:在执行Qt打包的过程中,我使用了Enigma virtual box工具来封包,以使得程序所需要的动态链接库能够被包含。但无论在执行封包前后,.exe文件都无法启动,在双击过之后,没有任何反应,只会在任务管理器中存在,但看不到任何窗口。

本文旨在记录解决上述问题的方法和流程,作者纯属小白,文章中难免出现错误和不成熟的见解,还望海涵。

本文方案可能并不适用于所有人,请在参考时谨慎操作。

1. 使用Release编译工程

  1. 选择正确的构建套件和Release,我这里的选择如下,因为我有一个插件在MVSC2019,所以我只能选择Qt5.15下的MSVC2019.

  1. 编译成功后,项目文件夹中会出现一个关于Release的文件夹

  1. 点开该文件夹,找到 Release 下的 .exe文件,将其复制出来放到一个新建文件夹之后,以备后续之用。

2. 利用windeployqt工具来找出和复制依赖项

该部分参考了:qt windeployqt 打包发布程序,点击可执行文件没有反应的问题

windeployqt 是 Qt 提供的一个实用工具,用于将 Qt 应用程序所需的所有依赖库和资源文件自动复制到可执行文件所在目录,以便将应用程序打包为一个独立的可执行文件。

当你使用 Qt 编写跨平台的应用程序时,通常需要将应用程序部署到不同的操作系统上,以便用户可以在没有安装 Qt 运行时的计算机上运行应用程序。这时,windeployqt 工具就能帮助你自动收集应用程序所需的依赖项,并将它们复制到一个目录中,以确保应用程序可以独立地运行。

在该部分操作过程中,由于我需要qml以及一个外部插件,因此也才导致了我之前封包后执行exe文件没有任何反应,在这里我只叙述正确的操作,而如果你不需要qml,可能以下操作中有些对你来说不是必须的。

  1. 打开对应构建套件的命令行窗口

  1. 打开刚刚所新建文件夹(我重命名为了“outexe”),并通过cd命令到该目录下

  1. 按照以下命令执行

    windeployqt 项目名称.exe --qmldir D:\software\Qt\5.15.2\msvc2019_64\qml --no-patchqt
    //windeployqt 为上面所述的工具
    //项目名称.exe即为自己项目的可执行程序
    //--qmldir D:\software\Qt\5.15.2\msvc2019_64\qml 我使用了qml所以要加上(目录为套件目录)
    //--no-patchqt, windployqt的可选项(也正是因为这个导致了运行无反应)
    

执行改行命令后,可以发现文件夹中多出了好多文件,这个时候双击 .exe文件,发现不是完全没有反应了。出现以下的提示:

说明现在只是这几个模块找不到,而不是之前的问题。

3. 解决 Qt Location /Qt Positioning is not installed

该部分参考了:打包Qt Location/Qt Positioning程序的正确姿势

  1. 首先复制对应套件下的Qt5Location.dll到刚刚新建文件夹(我的是“outexe”)的目录之下:

  1. 重新执行命令:
windeployqt 刚刚文件夹的目录\outexe\Qt5Location.dll -geoservices --qmldir D:\software\Qt\5.15.2\msvc2019_64\qml --no-patchqt

可以发现这个只不过是比之前多了刚刚文件夹的目录\outexe\Qt5Location.dll -geoservices ,就是为了解决对应的模块未安装问题的。

  1. 生成完之后将对应套件下的复制qml\QtLocation和qml\QtPositioning到outexe程序目录下为QtLocation文件夹和QtPositioning文件夹就可以了

  1. 此时点击 .exe文件,发现程序能够运行了。

4. 利用Enigma virtual box打包 .exe程序

该部分参考了:QT 软件打包为一个单独可执行.exe文件流程_qt打包成可执行程序-CSDN博客

上面exe文件虽然可以运行,但是需要和动态链接库在一个文件夹中,十分的不方便,因此可以通过封包来将这些打包到一个exe文件中。

封包的过程网上就有很多了。

  1. 首先从官网下载Enigma virtual box :https://enigmaprotector.com/en/downloads.html

  2. 安装后,直接打开,点击浏览,选中刚才的 .exe文件

  3. 增加文件夹递归,所选的文件夹就是刚刚我们一直使用的(我的是outexe)

  1. 点击右下角“文件选项”,点击压缩文件

  2. 执行封包,等待完成

此时生成的可执行文件就可以直接运行而不需要和一大堆动态链接库在一个文件夹中。

5. dependency walker工具等

dependency walker类似的工具有很多,可以帮助我们查找exe可执行文件的依赖项,并构建所有依赖模块的分层树图。但对本问题的解决没有帮助,因此只是简单记录一下。

6. 小结

本文主要讲述了Qt在导出为一个exe可执行程序时遇到的后台运行,但前台无反应的问题,并给出了解决办法。

本文参考了以下博客:

QT 软件打包为一个单独可执行.exe文件流程_qt打包成可执行程序-CSDN博客

qt windeployqt 打包发布程序,点击可执行文件没有反应的问题

打包Qt Location/Qt Positioning程序的正确姿势

dependency walker工具简介及使用-CSDN博客

QT发布打包后无法运行的问题

如果您觉得我写的不错,麻烦给我一个免费的赞!如果内容中有错误,也欢迎向我反馈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1400391.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++从小白到初级工程师【个人学习笔记】

目录 1.背景2.基础二维数组概念二维数组定义方式 二维数组数组名称概念例子 1.背景 C作为能和计算机硬件打交道的语言,在计算机世界中具有重要意义。在Android 应用层的JNI开发中,Android framework层、驱动层、kernel层均使用广泛。 相应的&#xff0c…

无法找到mfc100.dll的解决方法分享,如何快速修复mfc100.dll文件

在日常使用电脑时,我们可能会碰到一些系统错误提示,比如“无法找到mfc100.dll”的信息。这种错误通常会阻碍代码的执行或某些应用程序的启动。为了帮助您解决这一问题,本文将深入探讨其成因,并提供几种不同的mfc100.dll解决方案。…

Pycharm Terminal 无法激活conda环境

1.问题 Failed to activate conda environment. Please open Anaconda prompt, and run conda init powershell there. 这导致我们无法在Pycharm中使用conda命令 2.解决办法 修改为第二个,然后重启Terminal 再打开时发现已经是当前的conda环境

68. redis计数与限流中incr+expire的坑以及解决办法(Lua+TTL)

文章目录 一、简介二、代码演进第一版代码(存在bug隐患)第二版代码(几乎无隐患)第三版代码(完美无瑕) 一、简介 在日常工作中,经常会遇到对某种操作进行频次控制或者统计次数的需求,此时常用的…

一起来看看,C++11标准,那些超实用的新特性有哪些?

C11标准是 ISO/IEC 14882:2011 - Information technology -- Programming languages -- C 的简称,也称为C0x。它由国际标准化组织(ISO)和国际电工委员会(IEC)旗下的C标准委员会(ISO/IEC JTC1/SC22/WG21&…

基于华为MRS3.2.0实时Flink消费Kafka落盘至HDFS的Hive外部表的调度方案

文章目录 1 Kafka1.1 Kerberos安全模式的认证与环境准备1.2 创建一个测试主题1.3 消费主题的接收测试 2 Flink1.1 Kerberos安全模式的认证与环境准备1.2 Flink任务的开发 3 HDFS与Hive3.1 Shell脚本的编写思路3.2 脚本测试方法 4 DolphinScheduler 该需求为实时接收对手Topic&a…

四个简单的bat脚本

Windows11 最大劝退点就是这个右键菜单,复制粘贴都变成一点点的小图标,最气人的是点击底部的显示更多选项才能展示全部功能。让许多本来点一次就能完成的操作变成两次。其实使用一个小命令就能修改回win10版本的菜单。四个简单的bat脚本,能完…

Object.prototype.toString.call个人理解

文章目录 这段代码的常见用处参考文献: 拆分理解1、Object.prototype.toString小问题参考文献: 2、call函数的作用参考文献 3、继续深入一些(这部分内容是个人理解,没有明确文献支撑) 这段代码的常见用处 Object.prot…

这可能是最全面的计算机组成原理面试八股文了

第一章 计算机系统概述 “较简单,不做过多赘述,后面会详细学到” 第一节 计算机系统层次结构 1.计算机系统的基本组成:硬件软件 2.计算机硬件的基本组成:运算器存储器控制器输入设备输出设备 3.系统软件和应用软件 系统软件…

.NET国产化改造探索(六)、银河麒麟操作系统中安装多个.NET版本

随着时代的发展以及近年来信创工作和…废话就不多说了,这个系列就是为.NET遇到国产化需求的一个闭坑系列。接下来,看操作。 上一篇文章介绍了如何在银河麒麟操作系统上,使用Nginx.NET程序实现自启动。本文介绍下如何在一个环境中,…

explain工具优化mysql需要达到什么级别?

explain工具优化mysql需要达到什么级别? 一、explain工具是什么?二、explain查询后各字段的含义三、explain查询后type字段有哪些类型?四、type类型需要优化到哪个阶段? 一、explain工具是什么? explain是什么&#x…

macOS 14 Sonoma(苹果电脑系统) pkg完整安装包14.2.1正式版

macOS 14 Sonoma(苹果电脑系统) pkg完整安装包14.2.1正式版 游戏模式 Game mode是macOS Sonoma独有的Mac新游戏功能,在 macOS 14 中启用游戏模式后,Mac 会优先考虑运行游戏的CPU和GPU功能,不仅全面提高了游戏的流畅、稳定的帧率,…

Mybatis原理 - 标签解析

很多开源框架之所以能够流行起来,是因为它们解决了领域内的一些通用问题。但在实际使用这些开源框架的时候,我们都是要解决通用问题中的一个特例问题,所以这时我们就需要使用一种方式来控制开源框架的行为,这就是开源框架提供各种…

Python高级列表操作:性能优化、多线程与数据处理全解析

Python高级列表操作:性能优化、多线程与数据处理全解析 引言Python列表的高级特性列表推导式与生成器表达式列表操作的高级技巧列表与函数式编程列表在数据处理中的应用性能优化与内存管理Python列表与多线程/异步编程结语 引言 在现代软件开发中,选择恰…

【JavaEE Spring】SpringBoot 日志

SpringBoot 日志 1. 日志概述2. 日志使用2.1 打印⽇志2.1.1 在程序中得到⽇志对象2.1.2 使⽤⽇志对象打印⽇志 2.2 ⽇志框架介绍2.2.1 ⻔⾯模式(外观模式)2.2.2 SLF4J 框架介绍 2.3 ⽇志格式的说明2.4 ⽇志级别2.4.1 ⽇志级别的分类2.4.2 ⽇志级别的使⽤ 2.5 ⽇志配置2.5.1 配置…

MySQL---单表查询综合练习

创建emp表 CREATE TABLE emp( empno INT(4) NOT NULL COMMENT 员工编号, ename VARCHAR(10) COMMENT 员工名字, job VARCHAR(10) COMMENT 职位, mgr INT(4) COMMENT 上司, hiredate DATE COMMENT 入职时间, sal INT(7) COMMENT 基本工资, comm INT(7) COMMENT 补贴, deptno INT…

C语言练习day8

变种水仙花 变种水仙花_牛客题霸_牛客网 题目: 思路:我们拿到题目的第一步可以先看一看题目给的例子,1461这个数被从中间拆成了两部分:1和461,14和61,146和1,不知道看到这大家有没有觉得很熟…

前端框架学习 Vue (1) 概念,常用指令

Vue是什么 概念: Vue是一个用于 构建用户界面 的 渐进式 框架 1.构建用户界面:基于数据动态渲染页面 2.渐进式:循序渐进的学习(学一点就能用一点) (1)Vue核心包开发 场景:局部模块改造 (2)Vue核心包&Vue插件 工程化开发 场景:整站开发 3.框架:一套完整的项目…

遇到Access violation at address xxx in module ‘LoadDXF.dll‘.的解决方法

今天在设计PCB的时候,需要导入一个AutoCAD生成的DWG文件,结果导入出错,之前从来没有遇到过。也不清楚原因。错误的内容,如标题所示:Access violation at address xxx in module LoadDXF.dll. 对于我们既搞编程又设计…

PaddleDetection学习1——使用Paddle-Lite在 Android 上实现实时的目标检测功能

在 Android 上使用Paddle-Lite实现实时的目标检测功能 1 环境准备1.1 安装Android Studio1.1.1 安装JAVA JDK1.1.2 Android Studio 安装步骤1.1.3 Android Studio 配置NDK 1.2 Android 手机 2 部署步骤2.1 下载Paddle-Lite-Demo2.2 打开 yolo_detection_demo项目2.2.1 修改buil…