将应用打包为单个文件#
为什么要将 Linux 的程序打包为单个文件? 众所周知, 程序可能有数个甚至几十上百个依赖库, 或者叫动态链接库. 这一设计是为了减小程序体积, 因为可以多个程序共用同一套功能相同的代码. 但在一些时候, 它帮得倒忙远比其优点多. 具体地说, 当你的程序:
- 依赖数量庞大的动态链接库;
- 部分依赖安装起来非常麻烦, 或只能从半公开渠道获取 (例如需要注册后下载);
- 无法静态编译, 或部分库未提供静态版本;
- 需要在极短的时间内完成部署.
那么将其打包为单个文件可以解决你的烦恼.
当然, 这一方法并非没有缺点. 我们都很清楚, 把所有依赖都打包进来会导致分发文件体积膨胀严重, 甚至文件大小翻百倍都是常事. 在我的测试中, 打包后的应用大小在 120MB 左右. 如果你能接受这一点, 那么我确信它很适合你.
我们使用的文件格式被称为 AppImage, 对于几乎所有发行版, 它都是开箱即用的. 我们将先介绍手动打包的方式, 并以此认识包的格式; 随后给出更简单的打包方法.
手动打包#
下面的内容基于官方给出的 手动打包流程.
要手动打包, 你需要一个以下结构的目录:
MyApp.AppDir
├── AppRun
├── myapp.desktop
├── myapp.png
└── usr
├── bin
│ └── myapp
└── lib
└── lib*.so
上面给出的是最小结构, 也就是说你不能再省略内容了.
目录名 *.AppDir 是惯例;
AppRun 将作为被执行的程序, 它可以是可执行文件, 或是一个脚本, 关于它我们会在后文详细讲述;
myapp.desktop 是清单文件, 文件名基本是任意的, 但根目录必须存在且只存在一个 .desktop 文件;
myapp.png 是程序图标, 遗憾的是它不能省略.
usr 目录就像 LFS 描述的一样, bin 内存放可执行文件, lib 内存放库文件.
你要执行的应用文件应该就是 myapp.