当前位置: 首页 > news >正文

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命令解压缩出来,尝试能否正常运行!

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

完!

http://www.jsqmd.com/news/611274/

相关文章:

  • 忍者像素绘卷效果展示:同一Prompt下Z-Image-Turbo与原版Z-Image对比
  • 告别手动复制!5分钟用Python把PDF合同转Excel表格(PyMuPDF+pdfplumber教程)
  • Qwen3-ASR-1.7B安防应用:语音监控智能分析系统
  • nli-distilroberta-base在Ubuntu20.04环境下的详细部署与优化指南
  • 哥本哈士奇(aspnetx)佳
  • Phi-4-mini-reasoning企业级部署:Nginx反向代理+HTTPS安全访问配置教程
  • 2026年靠谱的收藏纪念章/双金属纪念章/铜制纪念章生产厂家推荐 - 品牌宣传支持者
  • 保姆级教程:手把手教你本地部署ACE-Step,轻松生成19种语言歌曲
  • uni-app中webview键盘弹起动态调整高度的最佳实践
  • 基于Qwen3.5-4B的微信小程序智能客服开发:自然语言理解与生成
  • 深入解析航顺HK32F030C8T6与STM32F030的兼容性差异及实战调优
  • 2026年知名的贵金属合金纪念章/银制纪念章/金制纪念章横向对比厂家推荐 - 品牌宣传支持者
  • 告别暴力搜索!用Python实现Rollout启发式策略,5分钟搞定复杂决策问题
  • 零代码部署语音识别:Qwen3-ASR-1.7B WebUI界面使用教程
  • Token正在偷走你的头发
  • [Refactor]CPP Learn Data Day 诿
  • OpenClaw日程管理:千问3.5-9B解析邮件创建待办
  • PH P5.2至5.5、5.6的新增功能详解
  • 2026年口碑好的常压等离子清洗机/广东真空等离子清洗机生产厂家推荐 - 行业平台推荐
  • 二分查找力扣题(leetcode)兑
  • 告别点灯实验:用STM32F407+HC-05打造你的第一个智能硬件原型(附手机控制源码)
  • 终端开发者利器:OpenClaw CLI对接Qwen3-32B-Chat镜像实战
  • 书匠策AI:毕业论文的“智能魔法棒”,让学术写作变得so easy!
  • Python中的圆周率计算:从math库到高精度mpmath的全面指南
  • Phi-3-mini-4k-instruct-gguf开源大模型:微软Phi-3轻量版中文部署全解析
  • OpenClaw自动化运维:gemma-3-12b-it监控网站可用性与自动重启
  • AI开发-python-langchain框架(--EasyOCR图片文字提取 )访
  • FastExcel/EasyExcel核心设计模式与源码实现剖析
  • 像素艺术创作指南:如何用像素时装锻造坊打造杂志级时装大片
  • OpenClaw模型切换指南:Phi-3-vision-128k-instruct与Qwen3-32B混合调用方案