Linux 将Qt程序打包为AppImage包

2023-11-04 08:30
文章标签 linux 程序 qt 打包 appimage

本文主要是介绍Linux 将Qt程序打包为AppImage包,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

在 Linux 环境下,开发完 Qt 程序后,也需要制作为一个安装包或者可执行文件进行分发。这里介绍使用 linuxdeployqt 将 Qt 程序打包为 .AppImage 应用程序(类似于 Windows 的绿色免安装软件)

环境配置

配置 Qt 环境变量

这一步是为了能让 linuxdeployqt 工具识别到 Qt 的环境。编辑 bashrc 文件

vim ~/.bashrc

在最后一行后面加入自己的 Qt 环境

#QT ENV
export QTDIR=/home/leo/Qt/5.15.2/gcc_64export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=$QTDIR/plugins:$QT_PLUGIN_PATH
export QML2_PATH=$QTDIR/qml:$QML2_PATH

立即生效

source ~/.bashrc

验证

qmake -v

配置 linuxdeployqt

前往 linuxdeployqt 下载 release 发布的 linuxdeployqt-continuous-x86_64.AppImage

然后授予可执行权限,并改个名方便使用,放入 /usr/local/bin 路径下,方便随地使用

chmod 777 linuxdeployqt-continuous-x86_64.AppImage
mv linuxdeployqt-continuous-x86_64.AppImage linuxdeployqt
sudo mv linuxdeployqt /usr/local/bin

测试一下

linuxdelpoyqt --version

piMs7NQ.png

配置 AppImageKit

前往 AppImageKit 下载 appimagetool-x86_64.AppImage

同样地,添加执行权限:

chmod 777 appimagetool-x86_64.AppImage

安装 patchelf

直接 apt 安装 patchelf 即可

sudo apt install patchelf

打包

将应用拷贝至 output 目录下,运行命令(这里以 QClipboard 可执行程序为例):

leo@leo-VirtualBox:~/Desktop/output$ linuxdeployqt QClipboard -appimage
linuxdeployqt  (commit 6fcaf74), build 55 built on 2023-09-23 13:33:41 UTC
Not using FHS-like mode
app-binary: "/home/leo/Desktop/output/QClipboard"
appDirPath: "/home/leo/Desktop/output"
relativeBinPath: "QClipboard"
ERROR: Desktop file missing, creating a default one (you will probably want to edit it)
ERROR: Icon file missing, creating a default one (you will probably want to edit it)
qmakePath 3= ""
appimagetool, continuous build (commit 8bbf694), build <local dev build> built on 2020-12-31 11:48:33 UTC
fatal: 不是 git 仓库(或者任何父目录):.git
Failed to run 'git rev-parse --short HEAD: Child process exited with code 128 (code 128)
Desktop file: /home/leo/Desktop/output/default.desktop
Categories entry not found in desktop file
.desktop file is missing a Categories= key

然后就可以看到,output 目录下生成了一些文件

lrwxrwxrwx 1 leo leo     10 11月  3 21:31 AppRun -> QClipboard
-rw-rw-r-- 1 leo leo    123 11月  3 21:31 default.desktop
-rw-rw-r-- 1 leo leo      0 11月  3 21:31 default.png
drwxrwxr-x 6 leo leo   4096 11月  3 21:31 doc
drwxrwxr-x 2 leo leo   4096 11月  3 21:32 lib
drwxrwxr-x 7 leo leo   4096 11月  3 21:32 plugins
-rwxrwxr-x 1 leo leo 157512 11月  3 21:30 QClipboard
-rw-rw-r-- 1 leo leo    145 11月  3 21:32 qt.conf
drwxrwxr-x 2 leo leo   4096 11月  3 21:32 translations

修改 desktop 文件

我们需要修改默认生成的 desktop 文件

leo@leo-VirtualBox :~/Desktop/output$ cat default. desktop 
[Desktop Entry]
Type=Application
Name=Application
Exec=AppRun %F
Icon=default
Comment=Edit this default file
Terminal=true

可以查看 desktop 文件规范进行修改

这里将 default. desktop 文件重命名为 QClipboard. desktop 文件,并修改为以下内容:

[Desktop Entry]
Categories=System; Office;
Type=Application
Keywords=clip; clipboard;
Name=QClipboard
Exec=AppRun %F
Icon=logo
Comment=A cross-platform clipboard tool that allows selecting items from clipboard history to paste.
Terminal=true

然后删除了多余的文件夹,最终效果如下:
在这里插入图片描述

生成 appimage 应用

使用 appimagetool 生成 appimage 应用。

执行 ./appimagetool-x 86_64. AppImage output/ 后面的output就是我们的 output 目录。

注意:由于下载的appimagetool-x 86_64. AppImage应用并没有放入/usr/local/bin路径下,所以不能直接执行它。

leo@leo-VirtualBox :~/Downloads$ ./appimagetool-x 86_64. AppImage ~/Desktop/output/
appimagetool, continuous build (commit 8 bbf 694), build <local dev build> built on 2020-12-31 11:48:33 UTC
/home/leo/Desktop/output/QClipboard. desktop: hint: value "System; Office;" for key "Categories" in group "Desktop Entry" contains more than one main category; application might appear more than once in the application menu
Using architecture x 86_64
/home/leo/Desktop/output should be packaged as QClipboard-x 86_64. AppImage
WARNING: AppStream upstream metadata is missing, please consider creating itin usr/share/metainfo/QClipboard. appdata. xmlPlease see https://www.freedesktop.org/software/appstream/docs/chap-Quickstart.html#sect-Quickstart-DesktopAppsfor more information or use the generator at http://output.jsbin.com/qoqukof.
Generating squashfs...
Parallel mksquashfs: Using 6 processors
Creating 4.0 filesystem on QClipboard-x 86_64. AppImage, block size 131072.
[========================================================================/] 530/530 100%Exportable Squashfs 4.0 filesystem, gzip compressed, data block size 131072compressed data, compressed metadata, compressed fragments,compressed xattrs, compressed idsduplicates are removed
Filesystem size 25011.83 Kbytes (24.43 Mbytes)39.56% of uncompressed filesystem size (63223.96 Kbytes)
Inode table size 2316 bytes (2.26 Kbytes)55.20% of uncompressed inode table size (4196 bytes)
Directory table size 861 bytes (0.84 Kbytes)52.25% of uncompressed directory table size (1648 bytes)
Number of duplicate files found 0
Number of inodes 69
Number of files 59
Number of fragments 12
Number of symbolic links  2
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 8
Number of ids (unique uids + gids) 1
Number of uids 1root (0)
Number of gids 1root (0)
Embedding ELF...
Marking the AppImage as executable...
Embedding MD 5 digest
SuccessPlease consider submitting your AppImage to AppImageHub, the crowd-sourced
central directory of available AppImages, by opening a pull request
at https://github.com/AppImage/appimage.github.io

然后就可以在appimagetool-x 86_64. AppImage同级路径下,看到生成的QClipboard-x 86_64. AppImage包了

执行测试

QClipboard 应用成功执行

在这里插入图片描述

注意,分发给别人时,需要加上执行权限才可运行

总结

以上就是在 Linux 系统下,打包 Qt 程序为 AppImage 程序的全部过程。

同时欢迎对跨平台剪贴板工具加star:https://github.com/L-Super/QClipboard

https://blog.csdn.net/zyhse/article/details/106381937

https://www.cnblogs.com/linuxAndMcu/p/11016322.html

UnityLaunchersAndDesktopFiles - Community Help Wiki (ubuntu.com)

desktop文件规范 | DeepinWiki

icon-theme-spec

这篇关于Linux 将Qt程序打包为AppImage包的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/344490

相关文章

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

Linux线程同步/互斥过程详解

《Linux线程同步/互斥过程详解》文章讲解多线程并发访问导致竞态条件,需通过互斥锁、原子操作和条件变量实现线程安全与同步,分析死锁条件及避免方法,并介绍RAII封装技术提升资源管理效率... 目录01. 资源共享问题1.1 多线程并发访问1.2 临界区与临界资源1.3 锁的引入02. 多线程案例2.1 为

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

Linux之platform平台设备驱动详解

《Linux之platform平台设备驱动详解》Linux设备驱动模型中,Platform总线作为虚拟总线统一管理无物理总线依赖的嵌入式设备,通过platform_driver和platform_de... 目录platform驱动注册platform设备注册设备树Platform驱动和设备的关系总结在 l