当前位置:   article > 正文

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

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

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                 //查看版本

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

3、环境变量配置

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

vim ~/.bashrc
  • 1

我自己的路径如下

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


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

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

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

source ~/.bashrc
  • 1

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

qmake -v
  • 1

在这里插入图片描述

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

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

要查看LD_LIBRARY_PATH环境变量的内容

echo $LD_LIBRARY_PATH
  • 1

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

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

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

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

这个命令会将/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
  • 1
  • 2
  • 3

复制完成后,执行命令

linuxdeployqt test1_hello -appimage
  • 1

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

在这里插入图片描述

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
  • 1

注意事项:

  • 使用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、总结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/129418?site
推荐阅读
相关标签
  

闽ICP备14008679号