【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  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、总结

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

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

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

相关文章

5分钟轻松帮你EasyRecovery恢复女朋友照片

相信有不少男性电脑玩家都会将女朋友的照片存放在电脑硬盘之内,作为珍贵的收藏和回忆。但是在某些时候,如果我们错误地删除了这些照片,或者由于系统问题导致其中的照片丢失,那么我们怎么找回女朋友的照片?这个问题就足…

进程的学习

进程基本概念: 1.进程: 程序:存放在外存中的一段数据组成的文件 进程:是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡 2.进程相关命令: 1.top 动态查看当前系统中的所有进程信息(根据CPU占用率排序&#xf…

微芒计划-简洁方便的效率待办管理工具【免费】

😲微芒计划-简洁方便的效率待办管理工具【免费】 下载地址 📝我的待办 快速添加待办任务,快速查看任务进度,摘要等。新增标签,分类,更好管理待办任务。 ☀️OKR目标管理 OKR让抽象的企业战略明确为上下对…

✅技术社区项目—Session/Cookie身份验证识别

session实现原理 SpringBoot提供了一套非常简单的session机制,那么它又是怎么工作的呢? 特别是它是怎么识别用户身份的呢? session又是存在什么地方的呢? 核心工作原理 借助cookie中的 JESSIONID 来作为用户身份标识,这个数据相同的,认…

车载电子电器架构 —— OEM基础技术概念开发流程

车载电子电器架构 —— 基础技术概念开发 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗…

SpringMVC 学习(二)之第一个 SpringMVC 案例

目录 1 通过 Maven 创建一个 JavaWeb 工程 2 配置 web.xml 文件 3 创建 SpringMVC 配置文件 spring-mvc.xml 4 创建控制器 HelloController 5 创建视图 index.jsp 和 success.jsp 6 运行过程 7 参考文档 1 通过 Maven 创建一个 JavaWeb 工程 可以参考以下博文&#x…

吴恩达deeplearning.ai:Tensorflow训练一个神经网络

以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai 在之前的博客中。我们陆续学习了各个方面的有关深度学习的内容,今天可以从头开始训练一个神经网络了。 Tensorflow训练神经网络模型 我们使用之前用过的例子: 这个神经…

Python中的functools模块详解

大家好,我是海鸽。 函数被定义为一段代码,它接受参数,充当输入,执行涉及这些输入的一些处理,并根据处理返回一个值(输出)。当一个函数将另一个函数作为输入或返回另一个函数作为输出时&#xf…

JAVA算法和数据结构

一、Arrays类 1.1 Arrays基本使用 我们先认识一下Arrays是干什么用的,Arrays是操作数组的工具类,它可以很方便的对数组中的元素进行遍历、拷贝、排序等操作。 下面我们用代码来演示一下:遍历、拷贝、排序等操作。需要用到的方法如下 public…

26.HarmonyOS App(JAVA)列表对话框

列表对话框的单选模式: //单选模式 // listDialog.setSingleSelectItems(new String[]{"第1个选项","第2个选项"},1);//单选 // listDialog.setOnSingleSelectListener(new IDialog.ClickedListener() { // Override …

互联网加竞赛 机器视觉opencv答题卡识别系统

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 答题卡识别系统 - opencv python 图像识别 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分…

C++中的左值和右值

目录 一. 左值和右值的概念 1. 左值 1.1 可修改的的左值 1.2 不可修改的左值 右值 二. 左值引用和右值引用 1. 左值引用 2. 右值引用 主要用途 1. 移动语义 2. 完美转发 2.1 引用折叠 2.2 std::forward 一. 左值和右值的概念 什么是左值和右值 1. 左值 左值是一个表示…

Unity3D 使用 Proto

一. 下载与安装 这里下载Google Protobuff下载 1. 源码用来编译CSharp 相关配置 2. win64 用于编译 proto 文件 二. 编译 1. 使用VS 打开 2. 点击最上面菜单栏 工具>NuGet 包管理器>管理解决方案的NuGet 管理包 版本一定要选择咱们一开始下载的对应版本否则不兼容&am…

使用免费的L53巧解Freenom域名失效问题

进入2月份以来,不少小伙伴纷纷收到Freenom提供的域名失效,状态由正常变成了Pending。 失效后,域名无法使用,免费的午餐没有了,而现在域名的价格也是水涨船高,真是XXX。很多做外贸的小伙伴表示 难 啊&#x…

树状数组与线段树<2>——线段树初步

这个系列终于更新了(主要因为树状数组初步比较成功) 话不多说,切入正题。 什么是线段树? 线段树是一种支持单点修改区间查询(树状数组也行) and 区间修改单点查询(树状数组不行) and 区间修改区间查询(树状数组更不行)的高级数据结构,相当…

Chiplet技术与汽车芯片(二)

目录 1.回顾 2.Chiplet的优势 2.1 提升芯片良率、降本增效 2.2 设计灵活,降低设计成本 2.3 标准实行,构建生态 3.Chiplet如何上车 1.回顾 上一篇,我们将来芯粒到底是什么东西,本篇我们来看芯粒技术的优势,以及它…

5.1 Ajax数据爬取之初介绍

目录 1. Ajax 数据介绍 2. Ajax 分析 2.1 Ajax 例子 2.2 Ajax 分析方法 (1)在网页页面右键,检查 (2)找到network,ctrl R刷新 (3)找 Ajax 数据包 (4)…

多线程相关(4)

线程安全-下 使用层面锁优化减少锁的时间:减少锁的粒度:锁粗化:使用读写锁:使用CAS: 系统层面锁优化自适应自旋锁锁消除锁升级偏向锁轻量级锁重量级锁 ThreadLocal原理ThreadLocal简介原理ThreadLocal内存泄漏 HashMap…

VMware使用虚拟机,开启时报错:无法连接虚拟设备 0:0,因为主机上没有相应的设备。——解决方法

检查虚拟机配置文件并确保物理设备已正确连接。 操作: 选中虚拟机,打开设置,点击CD/DVD。在连接处选择使用ISO镜像文件

fpga_硬件加速引擎

一 什么是硬件加速引擎 硬件加速引擎,也称硬件加速器,是一种采用专用加速芯片/模块替代cpu完成复杂耗时的大算力操作,其过程不需要或者仅需要少量cpu参与。 二 典型的硬件加速引擎 典型的硬件加速引擎有GPU,DSP,ISP&a…