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[@]}
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 ./*,到此全部流程结束。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux 内核

查看内核的发行版 $ uname -r 5.4.0-150-genericcd /lib/modules/5.4.0-150-generic, 内核源码所在的位置:/usr/src 这里的内核源码路径(–kernel-source-path)即为: cd /usr/src/linux-headers-5.4.0-150-generic/ 临时生效: …

JMETER工具:以录制手机app为例

JMETER工具:以录制手机app为例子 JMETER安装和环境配置 pc需要安装jdk,并进行jdk的环境配置,安装好jdk并配置好后,通过命令行输入java –version出现以下界面就表示安装成功: (对应的jdk版本不可太低&…

网络通信(二)

UDP通信 特点:无连不是先接、不可靠通信 不事先建立连接;发送端每次把要发送的数据(限制在64KB内)、接收端IP、等信息封装成一个数据包,发出去就不管了 java提供了一个java.net.DatagramSocket类来实现UDP通信 Dat…

第13章-循迹功能 循迹小车讲解 原理分析 STM32智能小车循迹教程 红外对管使用 PID循迹算法分析

讲解一下我们小车里面的循迹部分,包括红外基础使用,无PID循迹和有PID循迹。 第13章-循迹功能 13.1-非PID循迹功能完成 先红外对管调试 我们这里学习一下,如何实现循迹功能 如何才能让小车沿着黑线运动、要让小车感知到黑线的位置&#x…

【SpringBoot】SpringBoot中防止接口重复提交(单机环境和分布式环境)

📝个人主页:哈__ 期待您的关注 目录 🌼前言 🔒单机环境下防止接口重复提交 📕导入依赖 📂项目结构 🚀创建自定义注解 ✈创建AOP切面 🚗创建Conotroller 💻分布…

[CISCN 2024] Crypto部分复现

文章目录 OvOez_rsacheckin浅记一下 迟来的文章 OvO 题目描述: from Crypto.Util.number import * from secret import flagnbits 512 p getPrime(nbits) q getPrime(nbits) n p * q phi (p-1) * (q-1) while True:kk getPrime(128)rr kk 2e 65537 kk …

3d打印问题总结

1.打印拉丝:https://zhuanlan.zhihu.com/p/152221550 解决方案:温度过高,PLA材料材料喷嘴温度一般设置为200度比较合适。

string OJ题

下面分享一下string做题心得 1. 明白字符串中存储的数字为0 8 9与0 8 9 完全不同,字符0其实在串中存储的是48,要有意识的转化。字符串中如果存数字8,意味着存了BS(退格) 例如1: 算出结果为5,存…

网上打印试卷的步骤是什么

对于学生和家长来说,打印试卷是日常学习中的一项重要需求。那么,如何在网上方便地打印试卷呢?下面,就让我来为您介绍琢贝云打印的试卷打印步骤。 一、选择琢贝云打印的原因 支持多种文件格式打印,包括图片、PPT、PDF、…

20.SkyWalking

一.简介 SkyWalking用于应用性能监控、分布式链路跟踪、诊断: 参考连接如下: https://github.com/apache/skywalking https://skywalking.apache.org/docs/ 二.示例 通过官网连接进入下载页面:https://archive.apache.org/dist/skywalkin…

2024年【T电梯修理】考试内容及T电梯修理新版试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年【T电梯修理】考试内容及T电梯修理新版试题,包含T电梯修理考试内容答案和解析及T电梯修理新版试题练习。安全生产模拟考试一点通结合国家T电梯修理考试最新大纲及T电梯修理考试真题汇总,…

k8s中yaml文件配置指定私有镜像仓库

1. yaml文件介绍 2. 如何快速编写yaml文件 1)如果有已存在的pod时可以 kubectl get pod xxxxxx -oyaml 2)直接假跑一次并查看 kubectl run xxxxxx --image镜像名 --dry-run -oyaml 3)查看pod相关描述信息 kubectl explain pod 3. 编写…

linux 安装redis 并设置开机启动

个人实测 流程 1、第一步 先下载redis ** redis地址 https://download.redis.io/releases/选择你想要的版本 我下载的是 如下图 2、第二步:把下载的包放到linux里面 我用的是 XSHELL 和XFTP 放到/usr/local/java路径下 你可以随便放 3、第三步: ** 执行 以下命令 进行解压 t…

js之图表使用

今天为了给大家演示图表的使用,今天展示下切换图形的修改属性快速修改 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script src"./js/jquery-3.7.1.js"></script><script src…

Llama 3没能逼出GPT-5!OpenAI怒“卷”To B战场,新企业级 AI 功能重磅推出!

Meta 是本周当之无愧的AI巨星&#xff01;刚刚推出的 Llama 3 凭借着强大的性能和开源生态的优势在 LLM 排行榜上迅速跃升。 按理说&#xff0c;Llama 3在开源的状态下做到了 GPT-3.7 的水平&#xff0c;必然会显得用户&#xff08;尤其是企业用户&#xff0c;他们更具备独立部…

flash-linear-attention中的Chunkwise并行算法的理解

这里提一下&#xff0c;我维护的几三个记录个人学习笔记以及社区中其它大佬们的优秀博客链接的仓库都获得了不少star&#xff0c;感谢读者们的认可&#xff0c;我也会继续在开源社区多做贡献。github主页&#xff1a;https://github.com/BBuf &#xff0c;欢迎来踩 0x0. 前言 …

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

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

mysql 函数 GROUP_CONCAT 踩坑记录,日志:Row 244 was cut by GROUP_CONCAT()

mysql 函数 GROUP_CONCAT 踩坑记录&#xff0c;报错&#xff1a;Row 244 was cut by GROUP_CONCAT 结论&#xff1a;个人建议还是放在内存中拼接吧~db日志信息&#xff1a;Row 244 was cut by GROUP_CONCAT())根本原因&#xff1a;拼接的字符串长度超过 group_concat_max_len […

【LLM多模态】多模态LLM在图表处理的应用

note 在真实场景下&#xff0c;我们进行测试&#xff0c;多模态大模型在处理显著文本时表现尚可&#xff0c;但在处理细粒度文本时往往效果并不太好&#xff0c;why? ​具体原因如下&#xff1a; 首先&#xff0c;视觉编码器的分辨率对于多模态大模型的性能影响较大&#x…

Jenkins 还可以支持钉钉消息通知?一个插件带你搞定!

Jenkins 作为最流行的开源持续集成平台&#xff0c;其强大的拓展功能一直备受测试人员及开发人员的青睐。大家都知道我们可以在 Jenkins 中安装 Email 插件支持构建之后通过邮件将结果及时通知到相关人员。 但其实 Jenkins 还可以支持钉钉消息通知&#xff0c;其主要通过 Ding…