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

news2024/9/23 19:17:25

【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  ls
  894  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.coloradmin.cn/o/1467826.html

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

相关文章

python[6]

类和对象 面向对象编程–说白就是让对象干活 创建类:class 类名: 创建类对象 对象名 类名() 构造方法 1、构造方法的名称是__init__ 2、构造方法的作用? 构建类对象的时候会自动运行 构建类对象的传参会传递给构造…

高级RAG:揭秘PDF解析

原文地址:https://pub.towardsai.net/advanced-rag-02-unveiling-pdf-parsing-b84ae866344e 2024 年 2 月 3 日 附加内容:揭秘PDF解析:如何从科学pdf论文中提取公式 对于RAG,从文档中提取信息是一个不可避免的场景。确保从源头…

python:读 Freeplane.mm文件,使用 xml.etree 生成测试案例.csv文件

Freeplane 是一款基于 Java 开源软件,继承 Freemind 的思维导图工具软件,它扩展了知识管理功能。 读取 Freeplane.mm文件,使用 xml.etree 生成测试案例.csv文件 编写 fpmm_etree_csv.py 如下 #-*- coding: UTF-8 -*- """ …

AWS安全组是什么?有什么用?

最近看到小伙伴在问,AWS安全组是什么?有什么用?今天我们大家就来简单聊聊,仅供参考哦! AWS安全组是什么?有什么用? 【回答】:AWS安全组是一种虚拟防火墙,用于控制进出…

Spring Security学习(七)——父子AuthenticationManager(ProviderManager)

前言 《Spring Security学习(六)——配置多个Provider》有个很奇怪的现象,如果我们不添加DaoAuthenticationProvider到HttpSecurity中,似乎也能够达到类似的效果。那我们为什么要多此一举呢?从文章的效果来看确实是多…

2024年 Openai的API相关全部概论汇总(通用版)

2024年 Openai的API相关全部概论汇总(通用版) 文章目录 2024年 Openai的API相关全部概论汇总(通用版)一、前言1、python快速开始 二、Openai 平台以及相关项目1、Openai的API管理平台2、ChatGPT项目推荐(1)…

ONLYOFFICE桌⾯应⽤程序v8.0:功能丰富,⽀持多平台

文章目录 可填写的 PDF 表单RTL支持电子表格中的新增功能其他改进和新增功能与 Moodle 集成用密码保护 PDF 文件快速创建文档本地界面主题总结 继 ONLYOFFICE 文档 v8.0 的发布后,很高兴,因为适用于 Linux、Windows 和 macOS 的 ONLYOFFICE 桌面应用程序…

ZYNQ W25Q256FVEI flash启动烧写系统

烧写ZYNQ petalinux从flash启动,W25Q256FVEI是FLASH型号,发现BOO.BIN能启动,报错: Wrong Image Format for bootm command ERROR: cant get kernel image! 其中烧写配置image.ub偏移地址的时候,image.ub.bin偏移地址…

- 工程实践 - 《QPS百万级的有状态服务实践》05 - 持久化存储

本文属于专栏《构建工业级QPS百万级服务》 继续上篇《QPS百万级的有状态服务实践》04 - 服务一致性。目前我们的系统如图1。现在我们虽然已经尽量把相同用户的请求转发到相同的机器,并且在客户端做了适配。但是因为成本,更极端的情况下,服务依…

【Ubuntu】使用WSL安装Ubuntu

WSL 适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 的一项功能,可用于在 Windows 计算机上运行 Linux 环境,而无需单独的虚拟机或双引导。 WSL 旨在为希望同时使用 Windows 和 Linux 的开发人员提供无缝高效的体验。安装 Linux 发行版时&#xff0c…

猫头虎分享已解决Bug || Error: Target container is not a DOM element (React) ‍

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

Kafka入门二——SpringBoot连接Kafka示例

实现 1.引入maven依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…

Sqli-labs靶场第8关详解[Sqli-labs-less-8]

Sqli-labs-Less-8 前言&#xff1a; SQL注入的三个条件&#xff1a; ①参数可控&#xff1b;&#xff08;从参数输入就知道参数可控&#xff09; ②参数过滤不彻底导致恶意代码被执行&#xff1b;&#xff08;需要在测试过程中判断&#xff09; ③参数带入数据库执行。&#…

从源码学习单例模式

单例模式 单例模式是一种设计模式&#xff0c;常用于确保一个类只有一个实例&#xff0c;并提供一个全局访问点。这意味着无论在程序的哪个地方&#xff0c;只能创建一个该类的实例&#xff0c;而不会出现多个相同实例的情况。 在单例模式中&#xff0c;常用的实现方式包括懒汉…

Spring Boot与HikariCP:性能卓越的数据库连接池

点击下载《Spring Boot与HikariCP&#xff1a;性能卓越的数据库连接池》 1. 前言 本文将详细介绍Spring Boot中如何使用HikariCP作为数据库连接池&#xff0c;包括其工作原理、优势分析、配置步骤以及代码示例。通过本文&#xff0c;读者将能够轻松集成HikariCP到Spring Boot…

深度学习中数据的转换

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

Java语言实现五子棋

目录 内容 题目 解题 代码 实现 内容 题目 五子棋 使用二维数组,实现五子棋功能. 1.使用二维数组存储五子棋棋盘 如下图 2.在控制台通过Scanner输入黑白棋坐标(例如:1,2 2,1格式 表示二维数组坐标),使用实心五角星和空心五角星表示黑白棋子. 如下图: 输入后重新输出…

Redis信创平替之TongRDS(东方通),麒麟系统安装步骤

我的系统: 银河麒麟桌面系统V10(SP1)兆芯版 1.先进入东方通申请使用 2.客服会发送一个TongRDS包与center.lic给你(我这里只拿到.tar.gz文件,没有网上的什么安装版) 3.上传全部文件到目录中 4.服务节点安装,并启动 tar -zxvf TongRDS-2.2.1.2_P3.Node.tar.gz cd pmemdb/bin/…

chatGPT 使用随想

一年前 chatGPT 刚出的时候&#xff0c;我就火速注册试用了。 因为自己就是 AI 行业的&#xff0c;所以想看看国际上最牛的 AI 到底发展到什么程度了. 自从一年前 chatGPT 火出圈之后&#xff0c;国际上的 AI 就一直被 OpenAI 这家公司引领潮流&#xff0c;一直到现在&#x…

探讨javascript中运算符优先级

如果阅读有疑问的话&#xff0c;欢迎评论或私信&#xff01;&#xff01; 本人会很热心的阐述自己的想法&#xff01;谢谢&#xff01;&#xff01;&#xff01; 文章目录 深入理解JavaScript运算符优先级运算符优先级概述示例演示示例1&#xff1a;加法和乘法运算符的优先级示…