【QT 5 +Linux下软件生成+qt软件生成使用工具+学习他人文章+第一篇:使用linuxdeployqt软件生成】

【QT 5 +Linux下软件生成+qt软件生成使用工具+学习他人文章+第一篇:使用linuxdeployqt软件生成】

  • 1、前言
  • 2、实验环境
  • 3、自我学习总结-本篇总结
      • 1、新手的疑问,做这件事的目的
      • 2、了解工具:linuxdeployqt工具
      • 3、解决相关使用过程中问题
  • 4、参照文章-感谢
  • 5、实验步骤
    • 1、新建工程
    • 2、自定义更改UI界面。
    • 3、软件图标
      • 1、找图标:可以去相关图标网站去找
      • 2、工程引入资源文件
      • 3、代码引入
      • 4、本工程实现情况
    • 2、linuxdeployqt工具安装
      • 1、下载linuxdeployqt
      • 2、软件下载完后,参考文章,使用指令
      • 3、环境变量配置
      • 4、环境变量配置-出现问题: LD_LIBRARY_PATH 环境变量
    • 3、linuxdeployqt工具使用
      • 1、进入编辑生产目录
    • 4、验证在另一个相似环境验证。
  • 6、代码链接
  • 7、细节
    • 1、环境影响
    • 2、命令:chmod 777 和 chmod +x 的却别
      • (1)chmod +x
      • (2)chmod 777
      • (3)权限数字解释
    • 3、ldd是什么
    • 4、早期-解决编译出现的问题
  • 8、总结

1、前言

我们之前使用win下的,qt自制软件时,当想给别人用的时候,就要经理打包等等,也许是时间过得有些许久,感觉没那么难,现在在Linux下,还是有很多不会的地方,需要学习。也有很多细节值得记录吧。

在win下,使用时,大概是使用关键,直接在软件上点点,久完事了,现在在Linux上,更多感觉很多事情要自己亲力亲为,使用命令行的方式。
打个部分,win就像你去餐厅点餐,菜单上有什么,你就只能点什么,而Linux,有点像你去到后厨,直接自己定制菜品,文件目录更加合理,原料啥的直接自己组合。这可能也是Linux是比较适合开发的,而win更多适合娱乐。

自己打算分为三章,其实主要是三件事情。

  • 第一篇:使用linuxdeployqt软件生成
  • 第二篇:桌面文件.desktop,文件编写与软件图标
  • 第三篇:打包生成安装的包(.deb)

这里其中第三篇还没有做,第二步自己按照参考文章成功实现了。

2、实验环境

实验环境还是挺重要的,因为有时候,在你电脑上能运行的东西,在别人的电脑就不一定能运行,这一部分的原因就可能是实验版本不一样,另外也发现其他小伙伴,也会问些问题,之前有人大致环境装的和我差不多,当时是win的环境,结果编译遇到问题,就跑过来问是不是环境不对,这还是要具体问题具体分析的,当时看了看,发现是其他问题,总的来说,环境还是挺重要的。
系统环境:
环境问题还是要注意下的,不同环境下可能还真的可能不一样。
在这里插入图片描述

QT软件版本环境: Linux qt环境

在这里插入图片描述

3、自我学习总结-本篇总结

1、新手的疑问,做这件事的目的

自己开始学习的时候,在Linux下,编译什么,几乎完全无从下手,多少有点懵逼的状态,就是那种,要做什么东西,需要某种技术时,你了解一些,但是实际操作时,发现计划无从下手,也不知道该参照什么。
言归正传,我们做软件生成,主要是我们自己编好的软件,想在其他Linux上运行,或者说给他人使用,为了达到这个目的,我们使用qt这个软件,编辑软件,但是运行的时候,其实qt为我们搭建好了环境。我还真傻傻地将编译软件直接放到另一个电脑上,结果是当然不运行。

所以我们需要生成,主要是使用工具linuxdeployqt,查网上当然不只是这一个工具。

2、了解工具:linuxdeployqt工具

linuxdeployqt是一个自动化工具,可以帮助你将应用程序和所有依赖打包成一个可移植的AppImage。AppImage是一个在Linux上广泛使用的格式,它允许应用程序以单一文件的形式分发,无需安装即可运行。

当然使用这样的工具,有比较好的解释文档。
https://doc.appimage.cn/docs/linuxdeployqt/
在这里插入图片描述

3、解决相关使用过程中问题

这其中软件最后使用起来感觉还是挺好的,但是配环境啥的,或者在安装软件时,其实遇到很多问题,之前开发在win下较多,在linux下,命令行报错,有时候还是稍微看着头疼的,多少有点不知所措。
所以使用软件的难点,倒不如说,是软件安装和使用过程中,解决所遇到问题。

4、参照文章-感谢

学习他人文章,至少有个大致规划,知道哪步骤该什么,如下,为自己参照的文章。
https://blog.csdn.net/zyhse/article/details/106381937
在这里插入图片描述

5、实验步骤

每次实验,都习惯自己从新创建一个工程,这样有什么问题,还能发现,就是自己走完这些步骤,也能知道细节,留下工程文件。

1、新建工程

这里可以看之前写的文章,也比较细了,没必要重复造轮子。
【Linux20.04-qt5.12.4软件安装与初步使用-qt在Linux使用-记录-笔记】

2、自定义更改UI界面。

这里我们直接选择UI界面。

在这里插入图片描述
如下,我们简单写点东西,不让空唠唠的只有空白界面。
在这里插入图片描述

3、软件图标

这个之前也说明过,简单说明三个步骤。

参考文章:【QT 5 +Linux下验证+显示软件图标+串口转换器使用+串口样例】

  1. 找图标:可以去相关图标网站去找
  2. 工程引入资源文件。
  3. 代码中引用图标。

1、找图标:可以去相关图标网站去找

需要准备在显示图标,可以在相关网站上下一个。

相关链接:https://www.iconfont.cn/

在这里插入图片描述

2、工程引入资源文件

在这里插入图片描述

3、代码引入

在这里插入图片描述

4、本工程实现情况

如下为本工程实际实现,上述步骤想看更多细节,建议去看看文章。
在这里插入图片描述

2、linuxdeployqt工具安装

在这里插入图片描述

这块参照文章说的挺好了,直接参照相关步骤。

1、下载linuxdeployqt

https://github.com/probonopd/linuxdeployqt/releases
使用浏览器不同,或者实际时间不同,界面会有不一样情况。
在这里插入图片描述

2、软件下载完后,参考文章,使用指令

下载到下载目录后,以下为自己当时操作指令截图
在这里插入图片描述

  890  mv linuxdeployqt-continuous-x86_64.AppImage linuxdeployqt   //更改简短的名字891  ls   //查看892  chmod 777 linuxdeployqt     //给权限893  ls894  mv linuxdeployqt /usr/local/bin/     //移动到对应目录895  sudo mv linuxdeployqt /usr/local/bin      //需要sudo权限896  linuxdeployqt --version                 //查看版本

如果没有什么问题的话,会出现以下提示,版本情况。
在这里插入图片描述

3、环境变量配置

指令如下,我们要在文件里填写一些路径。

vim ~/.bashrc

我自己的路径如下

export PATH=/home/wjl/Qt5.14.2/5.14.2/gcc_64/bin:$PATH
export LIB_PATH=/home/wjl/Qt5.14.2/5.14.2/gcc_64/lib:$LIB_PATH
export PLUGIN_PATH=/home/wjl/Qt5.14.2/5.14.2/gcc_64/plugins:$PLUGIN_PATH
export QML2_PATH=/home/wjl/Qt5.14.2/5.14.2/gcc_64/qml:$QML2_PATH
export LD_LIBRARY_PATH=/home/wjl/Qt5.14.2/5.14.2/gcc_64/lib:$LD_LIBRARY_PATH

在这里插入图片描述

这块在配置环境变量的时候,自己不免有个疑问,就是自己配置环境不确定对不对的,有点不敢确定是不是这个目录。
这个其实跟当初装qt这个软件有关系,当时你装qt的时候,会选择一个路径,这个理论上你应该记得,如果不记得一般应该是想参照博主一样,在opt目录下
在这里插入图片描述
如下,按照博主的写法,qt安装的 “根目录/opt” 目录在下面

在这里插入图片描述而我自己其实是安装在的用户下面了。
如下,找到这样的目录,
在这里插入图片描述然后一层层下下找。基本都在gcc_64目录下
在这里插入图片描述弄好后,使文件立即生效

source ~/.bashrc

然后查询下,看看设置是否正确

qmake -v

在这里插入图片描述

4、环境变量配置-出现问题: LD_LIBRARY_PATH 环境变量

如果读过参考文章,会发现我这里配置环境变量和参考博主还是有区别的,这块就有 LD_LIBRARY_PATH 环境变量问题,这块当时报错了,因为当时自己不确定是哪个路径,后调试下,才过吧,这块还是要注意下。

要查看LD_LIBRARY_PATH环境变量的内容

echo $LD_LIBRARY_PATH

这个命令会显示LD_LIBRARY_PATH变量当前的值。如果这个变量没有被设置,命令可能不会显示任何内容。

说明:LD_LIBRARY_PATH是一个环境变量,用于指定动态链接器搜索共享库的额外目录。当你运行一个程序时,系统会在这些目录中查找所需的共享库。

如果你需要临时设置或修改这个变量,你可以使用如下命令:

export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH

这个命令会将/path/to/library添加到LD_LIBRARY_PATH的当前值之前。
应该用希望添加的实际库路径替换/path/to/library。

如下为当时我实际操作截图
在这里插入图片描述
我已经将这个 LD_LIBRARY_PATH 环境变量变量添加到了 ~./bashrc中了。不过这个问题还是要注意下。

3、linuxdeployqt工具使用

完成上述步骤后,就可以使用软件了,如果一切正常,会遇到不少报错。至少我自己是如此。看见报错多少有些头大。

1、进入编辑生产目录

我们先查看下qt将生产文件给我们放到哪里了。我这里分辨率有些问题,不过能帮你确定生产后的放在哪里。
在这里插入图片描述

然后进入生成目录,如下为生成的目录以及文件,读者根据自己实际情况进入相关目录。
在这里插入图片描述我们新建一个两层目录 testSetup,然后将qt生产文件中“tees1_hello”复制到里面,这里可以根据自己实际情况,更改。然后将使用命名。

mkdir testSetup
cd test
mkdir Test

复制完成后,执行命令

linuxdeployqt test1_hello -appimage

相关配置和编译问题解决后,应该会如下。
在这里插入图片描述
我们右键点出终端运行下。

在这里插入图片描述

4、验证在另一个相似环境验证。

要找个没有本机环境的运行。
在这里插入图片描述

6、代码链接

(1)工程代码
https://download.csdn.net/download/qq_22146161/88858979
(2)生成文件
https://download.csdn.net/download/qq_22146161/88858098

7、细节

1、环境影响

上述这个是x86上使用的,意思是底层是x86,像在ARM上是无法运行的。
在这里插入图片描述

2、命令:chmod 777 和 chmod +x 的却别

这块特意上网查了下,在处理权限方面,理解chmod +x与chmod 777之间的差别很重要。

(1)chmod +x

  • chmod +x命令为文件的所有者、所属组和其他用户添加执行权限,而不改变文件的读写权限。
  • 对于.desktop文件而言,添加执行权限(x)允许桌面环境识别并执行这个文件作为应用程序快捷方式。
  • 执行chmod +x通常被视为安全的做法,因为它仅添加必要的执行权限而不改变其他权限。

(2)chmod 777

  • chmod 777命令为文件的所有者、所属组和其他用户设置读(r)、写(w)和执行(x)权限。
  • 这意味着任何用户都可以读取、修改和执行该文件,这在多用户环境中可能导致安全风险。
  • 尽管chmod 777确实包括了执行权限,它通过去除文件操作的任何限制来提供最宽松的权限设置,通常不推荐这样做,除非你确实需要这样的权限设置。

(3)权限数字解释

  • 权限数字由三位组成,分别代表文件所有者(owner)、所属组(group)和其他用户(others)的权限。
  • 每一位数字是其对应权限的总和:读(4)、写(2)和执行(1)。因此,7(4+2+1)代表读、写、执行权限都被设置了。

总的来说,对于一些文件而言,chmod +x通常就足够了,因为你只需要确保文件是可执行的。使用chmod 777不仅不必要,而且从安全角度来看,也是不推荐的。

3、ldd是什么

如下,是网上找到资料,对于IDD的解释。

  • ldd是一个在Linux系统上常用的命令行工具,用于打印共享库依赖(即动态链接库依赖)。
  • 当你运行一个编译好的程序时,该程序可能依赖于系统中的一个或多个共享库(.so文件),ldd可以帮助你了解这些依赖关系。

使用ldd,可以查看一个可执行文件或共享库文件所依赖的所有共享库,以及这些库的路径。这对于调试程序或确保程序有正确的库依赖非常有用,特别是当你遇到由于缺少库或库版本不匹配导致的运行时错误时。

ldd program

注意事项:

  • 使用ldd时要小心,因为如果你对一个恶意的或不可信的可执行文件运行ldd,它可能会执行该文件指定的预加载库中的代码。因此,最好只对已知和可信的程序使用ldd。
  • 在某些情况下,如果程序使用了特定的加载共享库的技术(如直接调用dlopen),ldd可能无法显示所有依赖

如下是我查看本工程软件的显示,大概反馈如下图

在这里插入图片描述

4、早期-解决编译出现的问题

我当时不是编译这个软件,是另一个软件,但是问题还是相似的,如下为截图,看着有点多少蒙。。。

在这里插入图片描述
问题罗列如下。

(1)桌面文件和图标文件缺失:ERROR: Desktop file missing, creating a default one (you will probably want to edit it)
(2)qmake路径未指定:ERROR: Icon file missing, creating a default one (you will probably want to edit it)
(3)库版本不匹配:libQt5Core.so.5: version `Qt_5.14’ not found
(4)IDD配置库不对:ERROR: Please ensure that all libraries can be found by ldd. Aborting. ERROR: ldd outputLine:

其实一路下来我们已经解决一些问题了,写桌面图标在下一篇类,上面问题,是开始运行是遗留的,猜测你可能遇到,这个流程会大致解决问题。也是问题太多,也不太好整理了。。

8、总结

还是有很多问题的,调试的时候,从不会到会些,有很多问题其实还是有些忽略,无法记录下的。

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

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

相关文章

新手想要做好抖音小店,在开店前你需要知道这五点注意事项!

大家好,我是电商小布。 开抖店你说难吗,其实也不难,把需要的材料准备好就可以着手开店。 难的呢,是在小店的运营上边。 所以新手开店想要少出错,少踩坑,一定要提前把店铺的相关注意事项搞清楚。 今天&a…

将yolov8权重文件转为onnx格式并在c#中使用

yolo模型转ONNX 在yolov8中,我们将训练结果的.pt权重文件转换为onnx格式只需要使用ultralytics库中的YOLO类,使用pip安装ultralytics库,然后执行下面python代码 from ultralytics import YOLO# 加载YOLOv8模型 model YOLO("best.pt&q…

Selenium浏览器自动化测试框架详解

selenium简介 介绍 Selenium [1] 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google C…

深度学习中数据的转换

原始(文本、音频、图像、视频、传感器等)数据被转化成结构化且适合机器学习算法或深度学习模型使用的格式。 原始数据转化为结构化且适合机器学习和深度学习模型使用的格式,通常需要经历以下类型的预处理和转换: 文本数据&#xf…

台式电脑电源功率越大越费电吗?装机选购多少W电源

要组装一台电脑,我们首先需要选择硬件。 硬件搭配最关键的一点就是CPU和主板的兼容性。 硬件、电源等之间的平衡都需要仔细考虑。 那么台式电脑电源多大功率合适呢? 下面分享组装电脑电源瓦数选购指南,教您正确选择合适的电源瓦数。 让我们来…

消息中间件篇之RabbitMQ-消息不丢失

一、生产者确认机制 RabbitMQ提供了publisher confirm机制来避免消息发送到MQ过程中丢失。消息发送到MQ以后,会返回一个结果给发送者,表示消息是否处理成功。 当消息没有到交换机就失败了,就会返回publish-confirm。当消息没有到达MQ时&…

防御保护--VPN

目录 VPN的概述 VPN的分类 VPN的核心技术 --- 隧道技术 VPN其他常用技术 VPN的概述 VPN --- 虚拟专用网 --- 一般指依靠ISP或者其他NSP,也可以是企业自身,提供的一条虚拟网 络专线。这个虚拟的专线是逻辑上的,而不是物理上的,所…

LeetCode 2583. 二叉树中的第 K 大层和

题目链接https://leetcode.cn/problems/kth-largest-sum-in-a-binary-tree/?envTypedaily-question&envId2024-02-23 和我上一篇发的博客类似,通过广度优先遍历二叉树,使用队列存每层的节点值, 最后再做处理,输出第K大层和 …

书生·浦语大模型实战营第二节课作业

使用 InternLM-Chat-7B 模型生成 300 字的小故事(基础作业1)。 熟悉 hugging face 下载功能,使用 huggingface_hub python 包,下载 InternLM-20B 的 config.json 文件到本地(基础作业2)。 下载过程 进阶…

Nest.js权限管理系统开发(三)环境变量与配置文件

一般来说数据库的配置包含了一些敏感信息,不宜写在代码中提交到远程仓库,所以我们可以将配置写在配置文件中,然后提交 git 时候将生产环境的配置文件其忽略。我们可以新建.env和.env.prod两个文件分别存放开发与生产环境配置,也可以使用YAML等…

2024-2-22 作业

作业要求: 复习前面知识点(指针、结构体、函数)整理思维导图顺序表(按位置插入、按位置删除和去重、重新写)理解链表的代码,尝试写一下链表的尾插和输出 1.复习前面知识点(指针、结构体、函数) 2.整理思维导图 3.顺序表(按位置插入、按位置删除和去重、…

J7 - 对于ResNeXt-50算法的思考

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 J6周有一段代码如下 思考过程 首先看到这个问题的描述,想到的是可能使用了向量操作的广播机制然后就想想办法验证一下&…

Vue 图片轮播第三方库 介绍

Vue图片轮播是一种在网页上以自动或手动方式展示图片的组件,常用于产品展示、网站banner等场景。有许多第三方库可以帮助Vue开发者轻松实现图片轮播功能。以下是一些流行的Vue图片轮播第三方库的介绍: 1. Vue-awesome-swiper - **简介**:V…

数字化转型导师坚鹏:县域数字化转型案例研究

县域数字化转型案例研究 课程背景: 很多县级政府存在以下问题: 不清楚县域数字化转型的发展模式 不清楚县域数字化转型的成功案例 课程特色: 针对性强 实用性强 创新性强 学员收获: 学习县域数字化转型的发展模式。 学习县…

C/C++的内存管理(2)——new与delete的内核与本质

内存管理 operator new 与 operator delete函数回看new与delete的实现内置类型自定义类型 常见面试题 我们已经知道了new与delete的用法及其好处,发现它似乎与C语言中的动态内存开辟的函数(malloc/calloc/realloc)不同 在这里我们特别指出&am…

Word第一课

文章目录 1. 文件格式1.1 如何显示文件扩展名1.2 Word文档格式的演变1.3 常见的Word文档格式 3. 文档属性理解文档属性查看文档属性 4. 显示比例方式一: 手动调整方式二: 自动调整 5. 视图、窗口视图 1. 文件格式 1.1 如何显示文件扩展名 文档格式指的…

Java零基础 - 算术运算符

哈喽,各位小伙伴们,你们好呀,我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。 我是一名后…

Nginx缓存相关配置解析

文章目录 前言配置示例proxy_cacheproxy_cache_pathproxy_cache_keyproxy_cache_validproxy_cache_lockproxy_cache_methodsproxy_cache_bypassproxy_no_cacheproxy_cache_min_usesadd_header 可选项 使用示例通过响应头判断是否走缓存 缓存手动删除原博客 前言 客户端需要访问…

C#与VisionPro联合开发——TCP/IP通信

TCP/IP(传输控制协议/互联网协议)是一组用于在网络上进行通信的通信协议。它是互联网和许多局域网的基础,为计算机之间的数据传输提供了可靠性、有序性和错误检测。在软件开发中,TCP/IP 通信通常用于实现网络应用程序之间的数据交…

利用Socket.io实现实时通讯功能

在当今快节奏的社交和工作环境中,实时通讯已经变得至关重要。无论是在线游戏的即时交流,还是团队协作中的实时消息传递,都需要强大的实时通讯功能来支持。而在前端开发中,利用Socket.io这一强大的工具库,实现实时通讯功…