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

news2024/11/16 18:03:06

整理这篇文档的意义在于:自己走了很多弯路,淋过雨所以想为别人撑伞,也方便回顾,仅供参考
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[@]}
do
    cp "$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.coloradmin.cn/o/1697966.html

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

相关文章

linux笔记6--shell相关

文章目录 1. 查看当前的shell类型2. ps -f命令3. 父子shell4. 分号在命令里的作用问题:环境变量echo: 5. sleep和jobssleep:jobs:例子:&: 6. 外部命令和内建命令图解外部命令type命令 7. history命令8. alias命令9. 推荐 1. 查看当前的sh…

C/C++ vector详解

要想了解STL,就必须会看: cplusplus.comhttps://legacy.cplusplus.com/ 官方内容全都是英文的,可以参考: C/C初始识https://blog.csdn.net/2301_77087344/article/details/138596294?spm1001.2014.3001.5501 vector&#xff…

01JAVA基础

目录 1.基础语法 1.1 注释 1.2 关键字 1.3 常量 1.4 数据类型 1.5 变量 1.6 标识符 1.7 类型转换 2.算数运算符和分支语句 2.1 算数运算符 1.常规运算符 2.赋值运算符 3.自增自减 4.关系运算符 5.逻辑运算符 6.三元运算符 2.2 数据输入(Scanner) 2.3 分支判断…

抖店如何打造出爆品?学好这几招,轻松打爆新品流量

大家好,我是电商花花。 近年来,抖店商家越来越多,而选品,爆品就是我们商家竞争的核心了,谁能选出好的新品,打造出爆品,谁的会赚的多,销量多。 做抖音小店想出单,想赚钱…

老外卖27刀每月的教程已经更新

用了两天半的时间,边学习,边整理了一份老外的视频教程,涉及Facebook,YouTube,tiktok等大的流量平台,有案例,有分析,有如何做。 这个教程是老外讲的,没有什么玄乎的塑造价…

UneMeta与日本顶级IP熊本熊合作,首个NFT玩法揭秘

UneMeta 生态是一个备受加密市场以及动漫 IP 市场关注的老牌 Web3 数字资产平台,旨在架起现实艺术 IP 和 NFT 艺术社区之间的桥梁,以促进 Web3 社区的包容性和多样性。并期望基于生态一流的产品体验和平台属性,打造一个包容交汇的元宇宙社区。…

美发店服务预约会员小程序的作用是什么

美发店不同于美容美甲,男女都是必需且年龄层几乎不限,商家在市场拓展时只要方法得当相对比较容易,当今客户适应于线上信息获取、咨询及实际内容开展,商家也需要赋能和提升自身服务效率,合理化管理。 运用【雨科】平台…

经济寒冬下的黄金跳板:方案、活动、竞标一手掌握

推荐策划人必备的宝藏地产策划资源平台, 订阅浩叫:地产营销策划圈。这个平台简直是地产策划人的百宝箱,里面藏着无数的策划秘籍,等着你来挖掘。 这个平台就像是一个大型的方案库,里面收录了众多知名地产企业的内部资料…

用three.js+echarts给公司写了一个站点数据大屏系统经验总结

时间过的好快,参加公司的新项目研发快一年了,五一机器人项目首秀,我们遇到了高并发集中下单情景,然后海量数据处理场景来了,给我在后端领域的高并发实践业务上画上了漂亮的一笔经验。人都是在磨练中成长,我很感谢这次给我的机会,虽然有点累,但也有点小成就。正好现在有…

docker 上面安装 Nginx 以及设置访问 IP 就可以访问前端工程

docker 运行 Nginx 第一步:搜索下镜像 首先可以使用 docker search nginx 搜索 nginx 服务 docker search nginx相关控制台输出: NAME DESCRIPTION STARS OFFICIAL…

电子商务网站(网上商店PetShop)

PetShop是一个范例,微软用它来展示.Net企业系统开发的能力。PetShop随着版本的不断更新,至现在基于.Net2.0的PetShop 4.0为止,整个设计逐渐变得成熟而优雅,有很多可以借鉴之处。PetShop是一个小型的项目,系统架构与代码…

统计信号处理基础 习题解答10-2

题目 两个随机变量x和y,如果联合PDF分解为: 那么称他们为条件独立的。在上式中z是条件随机变量。 我们观察 其中, , 是相互独立的。证明和是条件独立的。给出条件变量是A。和是无条件独立么?也就是 成立么?为了回答这个问题&…

flutter项目运行报错Exception: Gradle task assembleDebug failed with exit code 1各种报错合集

1.报错 Launching lib/main.dart on sdk gphone64 arm64 in debug mode... Running Gradle task assembleDebug... Exception in thread "main" java.net.ConnectException: Operation timed out at java.base/sun.nio.ch.Net.connect0(Native Method) at j…

【模版方法设计模式】

文章目录 模板方法设计模式模板方法的设计原则模板方法设计模式组成部分代码实现抽象类实现具体实现类执行 模板方法设计模式 模版方法设计模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法骨架,而将一…

欢乐钓鱼大师游戏攻略:自动钓鱼技巧!

《欢乐钓鱼大师》是一款极具趣味性和挑战性的钓鱼模拟游戏,为玩家提供了一个体验钓鱼乐趣的虚拟世界。从湖泊到河流,再到广袤的海洋,游戏中的各种钓场让人流连忘返。无论是新手钓友,还是经验丰富的老钓手,都可以在游戏…

VMware虚拟机安装Windows server 2022超详细教程

文章目录 ISO下载安装步骤总结 ISO下载 链接:https://pan.baidu.com/s/19Z2q9KFKZq0pLisPZLn7_g 提取码:3pgn 安装步骤 安装完打开虚拟机后发现引导程序无法正常执行 解决方法见我的上一篇文章:http://t.csdnimg.cn/PzfOz 问题解决完后正常…

Dbs封装_连接池

1.Dbs封装 每一个数据库都对应着一个dao 每个dao势必存在公共部分 我们需要将公共部分抽取出来 封装成一个工具类 保留个性化代码即可 我们的工具类一般命名为xxxs 比如Strings 就是字符串相关的工具类 而工具类 我们将其放置于util包中我们以是否有<T>区分泛型方法和非泛…

如何恢复未保存或丢失的Word文档?

许多用户会遇到Word文档未保存而关闭的问题。实际上&#xff0c;您不会立即丢失未保存的文档数据。请不要对文档进行进一步的更改&#xff0c;例如修改并再次保存。您仍然有机会恢复未保存的Word文档。有一些方法可以帮助您恢复未保存的 Word 文档。 如果您不幸遇到这样的问题…

C#基础语言

​​​​ 目录 一个c# 程序主要包括以下部分&#xff1a;​​​​​​​ 标识符 C# 关键字 C# 数据类型 值类型&#xff08;Value types&#xff09; 引用类型&#xff08;Reference types&#xff09; 对象&#xff08;Object&#xff09;类型 动态&#xff08;Dynam…