Qt的程序如何打包详细教学

生成Release版的程序

在打包Qt程序时,我们需要将发布程序需要切换为Release版本(Debug为调试版本),编译器会对生成的Release版可执行程序进行优化,使生成的可执行程序会更小。

debug版本

debug版本是一种开发过程中的构建,主要用于调试和开发。其主要特点包括:

  • 包含调试信息:debug版本包含了许多调试信息和工具,如符号表、行号和代码的其他元数据,这些都有助于开发者在调试时更容易地追踪代码执行。
  • 自动初始化变量:在debug版本中,未初始化的变量可能会被自动初始化,以防止使用未定义的值。这对于调试过程非常有利,开发者能够更容易地追踪潜在问题。
  • 优化级别低:为了更便于调试,debug版本通常针对可读性进行优化,而不是性能。因此,它可能比release版本慢。
  • 功能完整:debug版本保留了所有功能,包括开发过程中用来测试的功能。

debug版本主要用于开发阶段,方便开发人员进行测试和调试。然而,它不适合最终用户使用,因为性能较低且可能包含未经过测试的代码。

release版本

release版本是最终产品的构建,旨在提供给用户或客户使用。其主要特点包括:

  • 去除调试信息:release版本通常去除了所有调试信息,以减小文件大小并提高性能。
  • 不自动初始化变量:在release版本中,编译器通常不会自动初始化未使用的变量,这有助于提高性能。
  • 高优化级别:release版本经过编译器优化,以提高代码的执行速度和效率。这可能包括内联函数、循环展开等优化技术。
  • 功能精简:某些调试用的功能可能在release版本中被禁用,以提升安全性和性能。

release版本是经过测试的稳定版本,适合向用户发布和生产环境使用。

profile版本

profile版本是一种介于debug和release之间的构建类型,旨在兼顾性能和调试。其主要特点包括:

  • 文件大小适中:profile版本编译后的可执行文件比debug版本小很多,但比release版本大一点。
  • 包含部分调试信息:profile版本带有部分调试符号信息,这使得开发者在需要时能够进行一定的调试。
  • 性能更优:由于进行了部分优化,profile版本的性能通常比debug版本更优,但可能略逊于release版本。

profile版本适用于那些需要在开发过程中进行一定调试,但又希望获得比debug版本更好性能的场景。

打包

构建完当前项目后,找到生成的带Release后缀的构建目录。最后再进入release文件夹找到exe文件单独复制到一个新建文件夹里面

打开cmd控制台,cd进入该路径

再输入windeployqt Pix.exe(后面输入你自己的程序名称) ,完成后文件夹下会自动添加许多文件

下载打包工具:Software Protection, Software Licensing, Software Virtualization 

下载完后选择中文更易操作

 

 

第一:选择exe文件

第二:选择打包好后文件的名称和存放路径

第三:把除exe外的文件拖入到Virtual Box Files树内

第四:点击执行封包

运气好的话就已经可以发给其他人运行了!

运行exe报错cannot load library Qt5Core.dll

把打包过的exe发给另一个电脑使用,打开exe会报错:cannot load library Qt5Core.dll
(实际上使用 Enigma Virtual Box 打包时已经包含了 Qt5Core.dll 这个库),但是自己电脑上运行确不会报错

Qt5Core.dll 作为 Qt 框架的核心组件,依赖于多个其他的动态链接库(DLL)才能正常运行,其中包括 libgcc_s_dw2-1.dlllibwinpthread.dll 和 libstdc++-6.dll

我们在Qt目录下找到这三个文件放到Virtual Box Files树内再执行封包

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

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

相关文章

【AI日记】24.11.06 我对投资的一点浅见

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 投资学习 内容:看投资大佬访谈或演讲B站地址:巴菲特1998年佛州大学讲座目标:学习巴菲特的投资哲学和人生智慧时间:2小时评估:非常不错,值…

适配器模式:类适配器与对象适配器

适配器模式是一种结构性设计模式,旨在将一个接口转换成客户端所期望的另一种接口。它通常用于解决由于接口不兼容而导致的类之间的通信问题。适配器模式主要有两种实现方式:类适配器和对象适配器。下面,我们将详细探讨这两种方式的优缺点及适…

语音识别:docker部署FunASR以及springboot集成funasr

内容摘选自: https://github.com/modelscope/FunASR/blob/main/runtime/docs/SDK_advanced_guide_offline_zh.md FunASR FunASR是一个基础语音识别工具包,提供多种功能,包括语音识别(ASR)、语音端点检测(VAD&#xf…

SpringBoot实现zip压缩包下载

目录 前言 后端(Spring Boot) 前端(HTML JavaScript) 前言 下面是一个简单的 Java Spring Boot 实现下载 ZIP 压缩包的示例,包含前端和后端代码。 后端(Spring Boot) 创建 Spring Boot 项目 …

oracle-函数-NULLIF (expr1, expr2)的妙用

【语法】NULLIF (expr1, expr2) 【功能】expr1和expr2相等返回NULL,不相等返回expr1经典的使用场景: 1. 数据清洗与转换 在数据清洗过程中,NULLIF 函数可以用于将某些特定值(通常是无效或不需要的值)替换为 NULL&…

QT创建按钮篇

QT创建按钮篇 1.概述 这篇文章从创建一个按钮对QT开发流程熟悉。 2.代码 #include "mywidget.h" #include <QPushButton>myWidget::myWidget(QWidget *parent): QWidget(parent) { // 第一种创建按钮方式 // QPushButton *btn new QPushButton(); /…

lanqiaoOJ 1112:小王子双链表 ← STL list

【题目来源】https://www.lanqiao.cn/problems/1112/learning/【题目描述】 小王子有一天迷上了排队的游戏&#xff0c;桌子上有标号为 1-10 的 10 个玩具&#xff0c;现在小王子将他们排成一列&#xff0c;可小王子还是太小了&#xff0c;他不确定他到底想把那个玩具摆在哪里&…

【IC验证面试常问问题-2】

IC验证面试常问问题 1 SV基础语法类1.1 Task和Function的区别1.2 OOP的特性1.3 在TB中使用interface和clocking blocking的好处1.4 SV中ref参数传递--引用1.5 SV类中的this是什么&#xff1f;super是什么&#xff1f; 【博客首发与微信公众号《漫谈芯片与编程》&#xff0c;欢迎…

springboot中使用jdbc查询数据库列表时,会出现数据库null值转换过程,很容易出现的错误

在springboot中使用jdbc查询数据库列表时&#xff0c;会出现数据库null转换的过程&#xff0c;这个过程很容易出现意想不到的错误&#xff1f; 比如&#xff1a;使用场景中的jdbcTemplate要查询某列表 return jdbcTemplate.query(sql.getSql(), sql.getParamter(), new BeanP…

【LLM】Agentic Workflow的四种常见思路

note Reflection 和 Tool Use 属于比较经典且相对已经广泛使用的方式&#xff0c;Planning 和 Multi-agent 属于比较新颖比较有前景的方式。 文章目录 note一、四种设计模式1. Reflection2. Tool use3. Planning4. Multi-agent collaboration 二、相关代码实践 一、四种设计模…

Python数据可视化seaborn

产品经理在做数据分析时可能需要通过可视化来分析。seaborn官网 1. relplot 散点图 https://seaborn.pydata.org/examples/scatterplot_sizes.html import pandas as pd import seaborn as sns df pd.DataFrame({x: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],y: [8, 6, 7, 8, 4, 6,…

基于ssm的个人健康管理系统

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

CSS3新增渐变(线性渐变、径向渐变、重复渐变)

1.线性渐变 代码&#xff1a; 效果图&#xff1a; 使文字填充背景颜色&#xff1a; 效果图&#xff1a; 2.径向渐变 代码&#xff1a; 效果图&#xff1a; 代码图&#xff1a; 效果图&#xff1a; 3.重复渐变 代码&#xff1a; 效果图&#xff1a;

【Kubernets】Kubernets进阶-Ingress配置SSL证书

Ingress配置SSL证书 1. 准备 SSL 证书和私钥2. 创建 Kubernetes Secret3. 配置 Ingress 资源4. 应用 Ingress 配置5. 验证配置注意事项 自签名证书在Ingress中如何应用?相关文献 在 Kubernetes 中&#xff0c;Ingress 资源可以用来管理外部访问到集群内服务的 HTTP 流量&#…

wvp 推拉转级联时频繁出现流无法观看的解决办法

经观察&#xff0c;推拉转任务在两三天时间内就失效了。 1 用脚本每天定时启动一次 wvp docker 容器, 并关闭所有推拉转任务&#xff0c;建议每天凌晨2点运行 import subprocess import time import socket import requestsdef restart_container(container_name):subprocess…

[mysql]mysql的DML数据操作语言增删改,以及新特性计算列,阿里巴巴开发手册mysql相关

1DML数据操作语言,增加删除改数据 插入数据INSERT 插入添加数据,两种方法 方式1:VALUES添加数据 #准备工作 USE atguigudb; CREATE TABLE IF NOT EXISTS emp1( id INT, name VARCHAR(15), hire_data DATE, salary DOUBLE(10,2)); SELECT * FROM emp1 INSERT INTO em…

自由学习记录(19)

unity核心也算是看完了吧&#xff0c;但觉得的确是少了点东西&#xff0c;之后再看mvc框架&#xff0c;和网络开发&#xff0c;&#xff0c;感觉有必要想想主次顺序了&#xff0c;毕竟在明年的3月之前尽量让自己更有贴合需求的能力 先了解一些相关概念&#xff0c;不用看懂&am…

vue计算属性

概念&#xff1a;基于现有的数据&#xff0c;计算出来新属性。并依赖数据的变化&#xff0c;自动重新计算 使用场景&#xff1a; 语法&#xff1a;声明在computed配置项中&#xff0c;一个计算属性对应一个函数&#xff0c;使用起来和普通属性一样使用{{计算属性名}} 代码&…

Promise 简单介绍及深入挖掘

一、什么是 Promise&#xff1f; 在 JavaScript 中&#xff0c;Promise 是用于处理异步操作的一种方式。它代表了一个 可能 在将来某个时间点完成或失败的操作的结果。Promise 使得我们能够优雅地处理异步代码&#xff0c;避免了回调地狱&#xff08;Callback Hell&#xff09;…

springboot2.x使用SSE方式代理或者转发其他流式接口

文章目录 1.需求描述2.代码2.1.示例controller2.2.示例service2.3.示例impl 3.测试 1.需求描述 使用SSE的方式主要还是要跟前端建立一个EventSource的链接&#xff0c;有了这个连接&#xff0c;然后往通道里写入数据流&#xff0c;前端自然会拿到流式数据&#xff0c;写啥拿啥…