news 2026/5/16 20:06:03

Linux ARM架构 使用 linuxdeployqt 打包QT程序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux ARM架构 使用 linuxdeployqt 打包QT程序

在Windows环境可以使用QT官方自带的windeployqt进行打包QT程序,但是Linux环境却没有;
所以今天从零开始搭建Linux环境打包QT程序的环境;(纯源码编译安装)
使用的是linuxdeployqt,现将全部步骤记录下来,供后来者参考!

系统信息:

首先确保在~/.bashrc中添加了QT的安装路径:

资源下载:https://download.csdn.net/download/cpp_learner/92789809


目录

  • 1.linuxdeployqt
  • 2.appimagetool
  • 3.patchelf
  • 4.libfuse2
  • 5.打包QT程序
  • 6.特殊情况

1.linuxdeployqt

下载:

gitclone https://github.com/probonopd/linuxdeployqt.git

修改代码,兼容高版本系统:

cdlinuxdeployqtvitools/linuxdeployqt/main.cpp# 注释如下内容:

编译安装:

mkdirbuild&&cdbuild cmake..make-j4

将编译出来的linuxdeployqt拷贝到/usr/local/bin路径:

sudocptools/linuxdeployqt/linuxdeployqt /usr/local/bin/sudochmod777/usr/local/bin/linuxdeployqt linuxdeployqt--version


2.appimagetool

下载:

# x86_64 架构:wgethttps://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage# ARM 架构 (aarch64):wgethttps://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-aarch64.AppImage-Oappimagetool# -O 修改名称

将下载的appimagetool拷贝到/usr/local/bin路径:

# 授予可执行权限chmod777appimagetool# 移动到系统PATH目录,以便在任意位置调用sudomvappimagetool /usr/local/bin/appimagetool appimagetool--version


3.patchelf

下载:

wgethttps://github.com/NixOS/patchelf/archive/refs/tags/0.18.0.tar.gz-Opatchelf-0.18.0.tar.gz

编译安装:

tar-xzfpatchelf-0.18.0.tar.gzcdpatchelf-0.18.0 ./bootstrap.sh# 生成 configure 脚本./configure--prefix=/usr/localmakesudomakeinstall# 验证patchelf--version


4.libfuse2

下载:

wgethttps://github.com/libfuse/libfuse/releases/download/fuse-2.9.9/fuse-2.9.9.tar.gz

解压缩:

# 解压源码包tar-xzvffuse-2.9.9.tar.gz# 进入源码目录cdfuse-2.9.9

修改源码:

viinclude/fuse_kernel.h 将:#include <sys/types.h>#define __u64 uint64_t#define __s64 int64_t#define __u32 uint32_t#define __s32 int32_t#define __u16 uint16_t修改为:#include <sys/types.h>#ifdef __linux__#include <linux/types.h>#else/* 非 Linux 系统才需要自定义这些类型 */#define __u64 uint64_t#define __s64 int64_t#define __u32 uint32_t#define __s32 int32_t#define __u16 uint16_t#endif


编译安装:

# 配置编译环境./configure# 开始编译make# 安装库文件sudomakeinstall

配置:

# 将 /usr/local/lib 添加到链接器配置中echo/usr/local/lib|sudotee/etc/ld.so.conf.d/libfuse.conf# 更新链接器缓存sudoldconfig# 查看版本信息pkg-config--modversionfuse


5.打包QT程序


打包命令:

linuxdeployqt 可执行程序-appimage

将QT程序单独放在一个独立的文件夹中,然后运行命令打包:

linuxdeployqt untitled-appimage

此时应该会报错:

说明:
1.前两个ERROR报错
linuxdeployqt 在打包时需要一个 .desktop 文件(用于定义程序在桌面环境中的名称、图标、启动方式等)和一个图标文件(通常是 PNG 格式)。它在当前目录中没有找到这两个文件,所以自动生成了默认的 default.desktop 和 default.png(一个空文件)。
注意,这两个错误可忽略!

2.git报错
appimagetool 试图执行 git rev-parse --short HEAD 来获取当前 Git 提交的短哈希,用于生成版本号。但当前目录(或上层目录)不是一个 Git 仓库,所以 git 报错。
注意,此报错也可忽略!

3.最后两行报错

Categories entry not foundindesktopfile.desktopfileis missing aCategories=key

这两行报错会导致无法打包生成.AppImage文件,即打包失败!
需要注意!
因为linuxdeployqt 需要一个有效的 .desktop 文件来描述应用程序。
它会自动生成一个默认的(default.desktop),但缺少必需的 Categories 字段。

解决:在自动生成的default.desktop文件添加添加一行Categories=Utility即可

videfault.desktop[Desktop Entry]Type=ApplicationName=ApplicationExec=AppRun %FIcon=defaultComment=Edit this defaultfileTerminal=trueCategories=Utility# 添加此行

重新打包:

# 输入命令重新生成.AppImage 文件appimagetool.

此时QT程序已经打包成功!
生成最终的产物:Application-aarch64.AppImage,可以独立运行,其已经包含了所有的QT依赖。

以下是打包QT时的输出:

# 1.开始打包d2000@d2000-GFB:~/testQT/build-untitled-unknown-Debug/test$ linuxdeployqt untitled-appimagelinuxdeployqt11(commit 7e7a01d), build<local dev build>built on2026-04-07 06:55:24 UTC Not using FHS-like mode app-binary:"/home/d2000/testQT/build-untitled-unknown-Debug/test/untitled"appDirPath:"/home/d2000/testQT/build-untitled-unknown-Debug/test"relativeBinPath:"untitled"ERROR: Desktopfilemissing, creating a default one(you will probably want to edit it)ERROR: Iconfilemissing, creating a default one(you will probably want to edit it)appimagetool, continuous build(commit 5735cc5), build<local dev build>built on2023-03-0822:51:59 UTC fatal: 不是一个git仓库(或者任何父目录):.git Failed to run 'git rev-parse--shortHEAD: Child process exited with code128(code128)Desktop file: /home/d2000/testQT/build-untitled-unknown-Debug/test/default.desktop Categories entry not foundindesktopfile.desktopfileis missing aCategories=key d2000@d2000-GFB:~/testQT/build-untitled-unknown-Debug/test$# 2.修改default.desktop 文件d2000@d2000-GFB:~/testQT/build-untitled-unknown-Debug/test$videfault.desktop# 3.再次打包d2000@d2000-GFB:~/testQT/build-untitled-unknown-Debug/test$ appimagetool.appimagetool, continuous build(commit 5735cc5), build<local dev build>built on2023-03-0822:51:59 UTC WARNING: appstreamclicommandis missing, pleaseinstallitifyou want to use AppStream metadata Using architecture aarch64 /home/d2000/testQT/build-untitled-unknown-Debug/test should be packaged as Application-aarch64.AppImage WARNING: AppStream upstream metadata is missing, please consider creating itinusr/share/metainfo/default.appdata.xml Please see https://www.freedesktop.org/software/appstream/docs/chap-Quickstart.html#sect-Quickstart-DesktopAppsformoreinformation or use the generator at http://output.jsbin.com/qoqukof. Generating squashfs... Parallel mksquashfs: Using8processors Creating4.0filesystem on Application-aarch64.AppImage, block size131072.[========================================================================================-]506/506100% Exportable Squashfs4.0filesystem,gzipcompressed, data block size131072compressed data, compressed metadata, compressed fragments, compressed xattrs, compressed ids duplicates are removed Filesystem size23573.57Kbytes(23.02Mbytes)39.02% of uncompressed filesystem size(60415.04Kbytes)Inode table size2347bytes(2.29Kbytes)42.73% of uncompressed inode table size(5493bytes)Directory table size807bytes(0.79Kbytes)52.10% of uncompressed directory table size(1549bytes)Xattr table size23bytes(0.02Kbytes)82.14% of uncompressed xattr table size(28bytes)Number of duplicate files found3Number of inodes67Number of files57Number of fragments24Number of symbolic links2Number of device nodes0Number of fifo nodes0Number of socket nodes0Number of directories8Number of ids(unique uids + gids)1Number of uids1root(0)Number of gids1root(0)Embedding ELF... Marking the AppImage as executable... Embedding MD5 digest Success Please 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 d2000@d2000-GFB:~/testQT/build-untitled-unknown-Debug/test$# 4.打包成功,输出Application-aarch64.AppImage产物d2000@d2000-GFB:~/testQT/build-untitled-unknown-Debug/test$ ll 总用量43148drwxrwxr-x4d2000 d200040964811:09 ./ drwxrwxr-x3d2000 d200040964715:37../ -rwxr-xr-x1d2000 d2000243388164811:09 Application-aarch64.AppImage* lrwxrwxrwx1d2000 d200084810:53 AppRun ->untitled* -rw-rw-r--1d2000 d20001434811:06 default.desktop -rw-rw-r--1d2000 d200004810:53 default.png lrwxrwxrwx1d2000 d2000114809:50 .DirIcon ->default.png drwxrwxr-x7d2000 d200040964810:53 doc/ drwxrwxr-x2d2000 d200040964810:53 lib/ -rwxrwxr-x1d2000 d2000198176974715:53 untitled* d2000@d2000-GFB:~/testQT/build-untitled-unknown-Debug/test$

运行打包出来的QT程序:

可以将Application-aarch64.AppImage重命名,然后拷贝到另一台电脑上运行了!


6.特殊情况

Application-aarch64.AppImage本质上也是一个压缩包,可以使用./Application-aarch64.AppImage --appimage-extract对其进行解压缩,得到打包前的程序;

如果拷贝到目标电脑上无法运行,提示dlopen(): error loading libfuse.so.2 类似的错误,那就是目标机器没有安装libfuse2,目标机器还得手动安装;(在线或者源码编译安装)

# Debian / Ubuntu 及其衍生版sudoaptupdatesudoaptinstalllibfuse2# Fedorasudodnfinstallfuse# 基于 Arch Linuxsudopacman-Sfuse2

否则就使用./Application-aarch64.AppImage --appimage-extract命令解压缩出来,尝试能否正常运行!

正常情况下,应该是可以正常运行的!

完!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/9 5:41:38

Qwen3.5-9B-AWQ-4bit电路仿真辅助:Multisim设计文档自动生成

Qwen3.5-9B-AWQ-4bit电路仿真辅助&#xff1a;Multisim设计文档自动生成 1. 电子工程师的文档痛点 硬件设计工程师每天都要面对一个耗时又不得不做的工作——撰写电路设计文档。从电路原理说明到元器件清单&#xff0c;从测试步骤到注意事项&#xff0c;这些文档不仅要求专业…

作者头像 李华
网站建设 2026/4/9 5:41:35

轻流 AI 如何让供应链协同从被动变主动

轻流 AI 如何让供应链协同从被动变主动 供应链管理是现代制造企业运营的核心环节之一&#xff0c;涉及采购、生产、仓储、物流等多个部门&#xff0c;以及供应商、客户等外部合作伙伴的协调配合。在传统的供应链管理模式中&#xff0c;各部门往往各自为战&#xff0c;信息传递…

作者头像 李华
网站建设 2026/4/9 5:41:34

科研必备:如何用R语言正确标注组间差异显著性(abc字母法)

科研图表实战&#xff1a;R语言多重比较与字母标注全流程解析 第一次在论文图表中看到那些神秘的abc字母时&#xff0c;我也曾一头雾水——为什么有些柱子标着相同的字母&#xff0c;有些却不同&#xff1f;直到审稿人退回我的初稿&#xff0c;用红笔圈出那些未标注显著性的柱状…

作者头像 李华
网站建设 2026/5/1 5:08:00

VSCode下CMake使用

这其实是 VSCode 中 CMake Tools 插件提供的核心命令面板。 为了让你更直观地理解&#xff0c;我们可以把 CMake 的工作流程比作**“盖房子”**&#xff1a; &#x1f6e0;️ CMake: 配置 对应英文&#xff1a;CMake: Configure比喻&#xff1a;画施工图纸。作用&#xff1a; C…

作者头像 李华
网站建设 2026/4/9 5:25:29

每日更新源码:解锁商业项目新可能的密钥

在数字化转型浪潮席卷全球的今天&#xff0c;企业对于高效、安全、可定制化的技术解决方案需求愈发迫切。无论是初创公司快速搭建电商平台&#xff0c;还是传统企业升级官网提升品牌形象&#xff0c;源码下载网站已成为开发者与创业者获取核心资源的重要渠道。本文将深入探讨一…

作者头像 李华