【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、找图标:可以去相关图标网站去找
需要准备在显示图标,可以在相关网站上下一个。
相关链接: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、总结
还是有很多问题的,调试的时候,从不会到会些,有很多问题其实还是有些忽略,无法记录下的。