恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

AppImage 打包详解

  • 首页
  • 资讯中心
  • /
  • AppImage 打包详解

相关资讯

基于STM32的智能家居系统与贝壳物联云平台实战 2026/8/29 7:14:04
STM32G0安全防护实战:RDP、PCROP与WRP固件保护全解析 2026/8/29 7:14:04
LLM Council多模型评审团:从流水线故障到生产加固的实战指南 2026/8/29 7:09:03

最新资讯

多语言智能无人机路径规划仿真系统:架构、算法与工程实践
从零构建亚马逊棋AI引擎:C++实现Minimax与Alpha-Beta剪枝实战
零基础学Python+AI:绕开648集陷阱的实战学习路径
Dubbo负载均衡策略深度解析:从原理到实战避坑指南
Hyperlynx DDR信号完整性仿真:IBIS模型适配与实战分析
皮尔逊相关系数假设检验:从核心条件到实战诊断的完整指南

今日推荐

云计算SPI三类服务模式是逐层抽象的关系:IaaS提供最底层的硬件资源,PaaS在IaaS基础上封装了开发运行环境,SaaS则进一步封装为可直接使用的软件
最新稳定版(Python 3.14):这是目前官方推荐的最新稳定版本。作为最后一个采用传统“3.x”命名的版本
etc目录下的profile.d文件目录设置环境变量和全局脚本shell

本周热门

Nextcloud 桌面客户端:把同步交给它,你只管改文件
如何将 HTML 转成 Word 文档且格式不丢失?html-to-docx 使用教程
Anki 批量操作卡片完整指南:一次搞定上千张,不再逐张修改

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

AppImage 打包详解

发布时间:2026/8/29 7:14:04
AppImage 打包详解 近水楼台先得月向阳花木易为春。导航格式介绍 - AppImage手动打包 - appimagetool自动打包 - linuxdeploy杂七杂八格式介绍 - AppImageAppImage 是 Linux 系统中一种新型的软件包格式它与 rpm、deb 这些软件包格式相比最大的不同便是1无需安装即用即删。2只需打包一次便可到处运行。完美的解决了不同 Linux 发行版Ubuntu/Debian/Fedora/CentOS之间软件包不统一的问题。它的工作原理便是将程序运行所需的文件全部打包在一个文件中待程序运行时再将这些文件提取在/tmp/.mount_xxxxxxx/目录中然后执行 AppRun 脚本启动程序以进行资源的调用。以下便是一个 AppImage 文件内部包含的目录树结构AppDir/ ├── AppRun ├── 应用图标.png ├── 程序名.desktop ├── usr/ ├── bin/ ├── lib/ ├── share/它本质上就是一个squashfs 文件系统 runtime 执行器。特别注意1要实现跨平台运行待打包的程序最好是在 CentOS 7 系统上进行编译然后再进行打包。【注编译 C/C 程序所使用的系统库 glibc 在 Linux 系统上几乎肯定存在而该库有着良好的向后兼容性因此使用旧版本的 glibc 库编译出来的程序几乎可以完美的运行在新版本的 glibc 系统上。而在 CentOS 7 上的 glibc 版本是 2.17该版本较旧且兼容性较好因此在其系统上编译出来的 C 程序通常也可以在大部分的 Linux 发行版系统中使用。】2待打包程序依赖的 lib 文件中最好只包含其专属的库文件即可不要包含类似 glibc 这样的系统库文件。【注这是因为在 A 系统中的 glibc 文件通常并不可以在 B 系统中使用因此为了避免 AppImage 程序运行错误请勿这样去做。再者glibc 在 Linux 系统中是肯定会存在的因此也并不需要额外去包含这样的依赖文件。】手动打包 - appimagetoolappimagetool 是由 AppImage 官方制作的打包工具在使用它进行打包时必须要先分析待打包程序的动态库依赖情况然后再完成对 AppDir 目录的装填最后才能使用 appimagetool 完成对程序的打包。由于分析程序的依赖情况是个很复杂的问题因此该工具在使用上体验并不太好。接下来我将演示如何对一个简单的 C 程序完成打包过程1文件准备hello.c。// 主文件 hello.c#includestdio.hintmain(){printf(Hello Appimage\n);return0;}2编译并打包#1编译及检验运行gcc-ohello hello.c ./hello#2制作 AppDir 目录树mkdir-pAppDir/usr/bin/cp./hello AppDir/usr/bin/wgethttps://github.com/boolean-world/appimage-resources/blob/master/hello-world-appimage/hello-world-icon.png-OAppDir/hello.png#任意图片文件即可nanoAppDir/hello.desktop#文件内容见下方nanoAppDir/AppRun#脚本内容见下方#3开始制作 AppImage 程序/root/appimagetool-x86_64.AppImage AppDir/附注:hello.desktop 文件如下[Desktop Entry] Namehello Exechello Iconhello TypeApplication CategoriesUtility; TerminaltrueAppRun 脚本如下#!/bin/shAPPDIR$(dirname $(readlink-f$0)) # 添加库目录 if [ -d $APPDIR/lib64 ]; then export LD_LIBRARY_PATH$APPDIR/lib64:$LD_LIBRARY_PATH fi if [ -d $APPDIR/usr/lib ]; then export LD_LIBRARY_PATH$APPDIR/usr/lib:$LD_LIBRARY_PATH fi # 启动主程序 //注意不同应用主程序路径需要修改 exec $APPDIR/usr/bin/hello $AppDir 目录树结构如下AppDir/ ├── AppRun //启动程序可以是简单的脚本也可以是 ELF只要保证运行该脚本主程序能被启动即可。 ├── hello.desktop //注意 EXEC 的值它对应的是/usr/bin/目录中的程序而 Icon 对应的是当前目录 ├── hello.png //也支持 svg 格式 └── usr └── bin └── hello自动打包 - linuxdeploylinuxdeploy 是一个由第三方制作的 AppImage 打包工具与 appimagetool 不同的是它可以对待打包程序自动进行依赖分析并自动将所需的依赖及资源文件按照 AppDir 的目录格式给装填完毕用户只需将模版化的 desktop 文件和 icon 文件准备好即可使用起来简直美滋滋。【示例一】接下来我将演示如何对一个需要依赖的简单 C 程序完成打包过程1文件准备mylib.h、mylib.c、main.c、Makefile。// 动态库头文件 mylib.h#ifndefMYLIB_H#defineMYLIB_Hintadd(inta,intb);voidhello();#endif// 动态库源码 mylib.c#includestdio.h#includemylib.hintadd(inta,intb){returnab;}voidhello(){printf(Hello from my dynamic library!\n);}// 主程序 main.c#includestdio.h#includemylib.hintmain(){hello();intresultadd(3,5);printf(3 5 %d\n,result);return0;}# Makefile 文件 CCgcc CFLAGS-fPIC -Wall LDFLAGS-shared TARGET_LIBlibmylib.so TARGET_MAINmain all: $(TARGET_LIB) $(TARGET_MAIN) $(TARGET_LIB): mylib.o $(CC) $(LDFLAGS) -o $(TARGET_LIB) mylib.o mylib.o: mylib.c mylib.h $(CC) $(CFLAGS) -c mylib.c $(TARGET_MAIN): main.o $(TARGET_LIB) $(CC) main.o -L. -lmylib -o $(TARGET_MAIN) main.o: main.c mylib.h $(CC) -c main.c clean: rm -f *.o $(TARGET_MAIN) $(TARGET_LIB)2编译并打包#1编译及检验运行cdmyappmakemvlibmylib.so /lib64/libmylib.so ./main#2制作的 main.desktop 文件内容catmain.desktop[Desktop Entry]NamemainExecmainIconmainTypeApplicationCategoriesUtility;Terminaltrue#3获取一个 Icon 文件wgethttps://github.com/boolean-world/appimage-resources/blob/master/hello-world-appimage/hello-world-icon.png-Omain.png#4开始制作 AppImage 程序/root/linuxdeploy-x86_64.AppImage--appdir/root/myapp--outputappimage --icon-file main.png --desktop-file main.desktop-emainls-lmain*.AppImage【示例二】最后我再演示如何对一个系统命令 find 完成打包过程#1制作的 find.desktop 文件内容catfind.desktop[Desktop Entry]NamefindExecfindIconfindTypeApplicationCategoriesUtility;Terminaltrue#2获取一个 Icon 文件wgethttps://github.com/boolean-world/appimage-resources/blob/master/hello-world-appimage/hello-world-icon.png-Ofind.png#3开始制作 AppImage 程序cd$(dirname$(whichfind))/root/linuxdeploy-x86_64.AppImage--appdir/root/find--outputappimage --icon-file find.png --desktop-file find.desktop-efindls-lfind*.AppImage注意1建议将 icon 和 desktop 文件放置在 find 命令根目录下这样在打包的时候能够避免很多问题。2由于 linuxdeploy 在打包环节调用的是 appimagetool而 appimagetool 在打包的时候会在 github 上拉取 runtime 文件因此在使用前建议设置全局代理以确保 github 可访问。杂七杂八AppImage 参考官网、参考文档、软件分发linuxdeploy 插件系统awesome-linuxdeploy插件 linuxdeploy-plugin-checkrt 在打包较复杂的 C 程序时可能会比较有用。理想的编译环境CentOS 7 x64、CentOS 6 x32。【注意64 位系统打包出的 AppImage 不可在 32 位系统使用。 】pkg2appimage 工具支持将 deb 软件包转换给 AppImage 格式的软件包。【注理论是美好的但实际打包时失败率太高且太折腾不推荐使用还是老实用 linuxdeploy 吧。】已打包的 AppImage 软件包可通过./app*.AppImage --appimage-extract将其包含的文件重新提取出来以供参考或重复打包。我的博客园

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号