Windows、Linux下,基于QT的打包方法

整理这篇文档的意义在于:自己走了很多弯路,淋过雨所以想为别人撑伞,也方便回顾,仅供参考
ps:

  • 第一次做Windows下打包,用了2小时,第二次20秒
  • 第一次做Linux(ubuntu)下打包,用了8小时,第二次1分半

一、Windows

有许多比较坑的帖子,会带新人走不少弯路,大家注意鉴别(没方法,随缘)
1、首先,找到自己编译的对应版本:
在这里插入图片描述
2、找到构建后的文件夹,复制当前生成的exe文件到一个新的文件夹(打包的目的文件,如:fileName)
在这里插入图片描述
3、找到对应版本的Qt文件,右键管理员运行
在这里插入图片描述
4、通过命令走到指定的地址
在这里插入图片描述
5、输入打包命令

windeployqt autoFileSet.exe --qmldir F:\Git-program\qt_practice\autoFileSet

autoFileSet.exe是我的程序名
F:\Git-program\qt_practice\autoFileSet 是我QML源文件地址

在这里插入图片描述
到这里就拷贝成功了
在这里插入图片描述

二、Linux

Linux下有两种方法,一种是通过自动化打包工具,一种是通过脚本,各有利弊

程序名以autoFileSet为例

1、自动工具打包

1、工具下载:下载地址
我使用的虚拟机。

2、修改名称:mv linuxdeployqt-continuous-x86_64.AppImage linuxdeployqt

3、修改权限:chmod 777 linuxdeployqt

4、放入/usr/local/bin目录,方便调用:sudo mv linuxdeployqt /usr/local/bin

5、测试,打印版本:linuxdeployqt --version
结果:

linuxdeployqt (commit 2b38449), build 62 built on 2023-12-27 21:00:01 UTC

6、根据环境变量找寻qt库文件:vim ~/.bashrc

7、在Vim里添加对应路径:
在这里插入图片描述

8、添加后让其生效:source ~/.bashrc

9、测试,打印版本:qmake --version

QMake version 3.1
Using Qt version 5.12.12 in /home/***/Qt5.12.12/5.12.12/gcc_64/lib

10、创建对应的文件夹,把可执行文件拷过来。

11、执行自动拷贝:linuxdeployqt fileName -appimage,检查是否拷贝成功
在这里插入图片描述
12、运行测试:./ autoFileSet

13、压缩文件到当前目录:sudo tar cvf autoFileSet.tar ./*

如有库的缺失看第三节

2、脚本打包

1、新建文件夹:mkdir File
2、进入文件夹:cd File
3、新建脚本文件:touch copylib.sh
4、通过vim修改脚本内容:

#!/bin/bash
LibDir=$PWD"/lib"
Target=$1
lib_array=($(ldd $Target | grep -o "/.*" | grep -o "/.*/[^[:space:]]*"))
$(mkdir $LibDir)
for Variable in ${lib_array[@]}
docp "$Variable" $LibDir
done

5、新建脚本文件:touch autoFileSet,修改内容

#!/bin/sh
appname=`basename $0 | sed s,\.sh$,,`
dirname=`dirname $0`
tmp="${dirname#?}"
if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
VLC_PLUGIN=$PWD/plugins
echo $VLC_PLUGIN
LD_LIBRARY_PATH=$dirname
export VLC_PLUGIN_PATH=$VLC_PLUGIN
echo $LD_LIBRARY_PATH
export LD_LIBRARY_PATH
$dirname/$appname "$@"

6、修改权限

sudo chmod 777 copylib.sh
sudo chmod 777 autoFileSet.sh

7、获取release生成的文件,拷贝至目标文件File
在这里插入图片描述

8、执行./copylib.sh autoFileSet命令,生成lib文件夹
9、将lib文件夹下面的库拷贝到File文件夹下面,此时完成了添加程序依赖库
10、在Qt的安装目录下,将copylib.sh复制到platforms文件夹当中,执行./copylib.sh libqxcb.so命令,此时也会生成lib文件夹,同样复制lib内的库到File下,重复的选替换即可
11、将platforms整个文件夹拷贝到File文件夹下
12、执行./autoFileSet.sh即可运行软件
如有库的缺失看第三节

3、库的缺失

两种打包方法都有问题,但是报错会提醒到我们,无非是某些库没有复制到,这里需要我们进行手动复制、拷贝。
常见错误如:

QQmlApplicationEngine failed to load component
qrc:/main.qml:3 无法为模块“QtQuick.Controls”:
无法加载库 /home/mbox/autoFileSet/QtQuick/Controls.2/libqtquickcontrols2plugin.so:
(libQt5QuickTemplates2.so.5: cannot open shared object file: No such file or directory) 加载插件

这代表缺少libQt5QuickTemplates2.so.5

QQmlApplicationEngine failed to load component
qrc:/main.qml:3 模块“QtQuick.Controls”没有安装
qrc:/main.qml:1 模块“QtQuick”没有安装
qrc:/main.qml:6 模块“QtQuick.Controls.Material”没有安装
qrc:/main.qml:4 模块“QtQuick.Layouts”没有安装
qrc:/main.qml:2 模块“QtQuick.Window”没有安装

这代表识别QtQuick失败,这个我走的比较久,原因是太信任报错了。
因为当前主流已经使用到QtQuick2版本以后了,这里的报错意思是识别不到QtQuick2,一定注意一下。
确认方法:修改本地QT的名称,比如:Qt5.12.12,修改为666,如果程序正常运行、功能无缺陷就代表打包成功了。

压缩

验证无误之后,就可以压缩文件了:sudo tar cvf autoFileSet.tar ./*,到此全部流程结束。

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

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

相关文章

不拍视频,不直播怎么在视频号卖货赚钱?开一个它就好了!

大家好,我是电商糖果 视频号这两年看着抖音卖货的热度越来越高,也想挤进电商圈。 于是它模仿抖音推出了自己的电商平台——视频号小店。 只要商家入驻视频号小店,就可以在视频号售卖商品。 具体怎么操作呢,需要拍视频&#xf…

【顶刊新文】nature plants|植物高度作为高山碳固存和生态系统对变暖响应的指标

文章简介 论文名称:Plant height as an indicator for alpine carbon sequestration and ecosystem response to warming(植物高度作为高山碳固存和生态系统对变暖响应的指标) 第一作者及单位:Quan Quan(中国科学院地…

Makefile学习笔记15|u-boot顶层Makefile01

Makefile学习笔记15|u-boot顶层Makefile01 希望看到这篇文章的朋友能在评论区留下宝贵的建议来让我们共同成长,谢谢。 这里是目录 版本号信息 # SPDX-License-Identifier: GPL-2.0VERSION 2024 PATCHLEVEL 01 SUBLEVEL EXTRAVERSION -rc4 NAME 这里定义了u-bo…

Spark基础笔记之启动命令顺序

系统环境(三台虚拟机) node1 192.168.32.101(主) node2 192.168.32.102 node3 192.168.32.103 1、启动hdfs、yarn、historyserver(hadoop用户启动) # 启动dfs,启动后的服务名: Da…

【ai】pycharm安装langchain 相关module

pycharm module install 【Python学习 】一篇文章教你PyCharm如何快速安装module 【python】pycharm如何安装python的模块包版本 2024.1.2 RC2 找到当前的虚拟项目 找到解释器 我现在配置为专门为openai-start 准备的3.10 版本+ 号可以找到模块

Vue3拖拽修改左侧元素宽度组件开发

在开发过程中有时候会碰到需要拖拽修改页面元素宽度的需求,实际场景是页面上有并排两个或多个元素,需要拖拽修改其中一个元素的宽度,则只引入下方组件代替页面中需要被拖拽的元素及右侧相邻的元素。需要将需要拖拽的元素放进下面组件的左边的…

pdf拆分成多个文件 pdf拆分成一页一页

pdf拆分成多个文件的方法。在现代办公环境中,PDF文件因其跨平台、保持格式一致等特性,成为了广泛使用的文件格式。然而,有时我们需要对PDF文件进行拆分,以便更好地管理和使用其中的内容。本文将详细介绍PDF拆分的方法和步骤&#…

Flutter 中的 ClipOval 小部件:全面指南

Flutter 中的 ClipOval 小部件:全面指南 在Flutter的丰富布局库中,ClipOval是一个用于裁剪子组件的显示区域为椭圆形或圆形的小部件。这种裁剪效果可以用于创建头像、图标或其他图形元素的美观边框。本文将提供ClipOval的全面指南,帮助你了解…

一.架构设计

架构采用 ddd 架构,不同于传统简单的三层的架构,其分层的思想对于大家日后都是很有好处的,会给大家的思想层级,提高很多。 传统的项目 现有的架构 采取ddd架构,给大家在复杂基础上简化保留精髓,一步步进行…

LabVIEW直方图应用解析

概述 在LabVIEW中,直方图是一种重要的工具,用于分析和展示数据的分布情况。它通过将数据分成若干区间并绘制对应频数,可以帮助用户了解数据的集中趋势、离散程度和分布形态。本文将详细介绍LabVIEW中直方图的使用方法、适用场合、实际意义及…

19 QinQ技术(Vlan两层封装)

1 什么是QinQ? QinQ(802.1Q-in-802.1Q),也叫做VLAN Stacking或Double VLAN,由IEEE 802.1ad标准定义,**是一项扩展VLAN空间的技术,**通过在802.1Q标签报文的基础上再增加一层802.1Q的Tag来达到扩…

工具使用-网络性能测试工具(iperf)-TCP 和 UDP 的吞吐量-包转发率参数的理解

时间戳:2024年5月26日15:18:39 iperf 和 netperf 都是最常用的网络性能测试工具,测试 TCP 和 UDP 的吞吐量。它们都以客户端和服务器通信的方式,测试一段时间内的平均吞吐量。 接下来,我们就以 iperf 为例,看一下 TC…

MyBatis进阶(<if><trim><where><set><foreach><include>标签的使用)

目录 < if >标签 < trim >标签 < where >标签 < set >标签 < foreach >标签 < include >标签 < if >标签 非必填字段 xml实现 <insert id"insertUserByCondition">INSERT INTO userinfo (username,passwor…

【力扣一轮】202.快乐数 1.两数之和

202.快乐数 力扣链接 代码随想录链接 思路 看到这一题没思路&#xff0c;直接看题解。 发现其中一个难点在于“无限循环”&#xff0c;这个字眼可以转换成退出条件。退出条件就有两种&#xff0c;一种是这个数字是快乐数&#xff0c;一种是这个数字不是快乐数。 如果是快…

【vue嵌套iframe】实现项目重构

vue嵌套iframe 创建 iframe 通用组件添加页面及路由进阶&#xff1a;vue 与 iframe 的双向通讯代码下载 适用于使用vue重构及vue访问其他服务页面 基于vue3示例页面添加嵌套iframe的页面 创建 iframe 通用组件 IframeTemplate.vue 页面布局 <template><div class…

9.2 Go语言入门(包和导入)

Go语言入门&#xff08;包和导入&#xff09; 目录一、包和导入1. 包&#xff08;Package&#xff09;1.1 包的定义1.2 包的作用1.3 main 包1.4 非 main 包 2. 导入&#xff08;Import&#xff09;2.1 导入标准库2.2 导入第三方包2.3 导入本地包2.4 导入别名2.5 导入并调用初始…

mysql授权用户

mysql授权用户只能看到某张表单表 要实现MySQL中的用户只能看到某张表&#xff0c;可以通过创建一个新的数据库用户&#xff0c;并且只授予该用户对特定表的权限。以下是实现这一功能的步骤和示例代码&#xff1a; 创建新用户并设置密码。 授予该用户对特定数据库的权限。 授…

国内最受欢迎的7大API供应平台对比和介绍||电商API数据采集接口简要说明

本文将介绍7款API供应平台&#xff1a;聚合数据、百度APIStore、Apix、数说聚合、通联数据、HaoService、datasift 。排名不分先后&#xff01; 免费实用的API接口 第一部分 1、聚合数据&#xff08;API数据接口_开发者数据定制&#xff09; 2、百度API Store(API集市_APIStore…

数据库系统原理实验报告6 | 视图

整理自博主本科《数据库系统原理》专业课自己完成的实验报告&#xff0c;以便各位学习数据库系统概论的小伙伴们参考、学习。 专业课本&#xff1a; ​ ———— 本次实验使用到的图形化工具&#xff1a;Heidisql ​ 目录 一、实验目的 二、实验内容 1&#xff0e;根据EDUC数…

妙解设计模式之适配器模式

适配器模式的概念 适配器模式是一种结构设计模式&#xff0c;它允许将接口不兼容的类通过一个适配器类进行适配&#xff0c;使得这些类可以一起工作。适配器模式通常用于以下情况&#xff1a; 当一个接口的实现类已经存在&#xff0c;但是另一个接口需要的是不兼容的时候。当…