文章目录
1.介绍
AppImage是一种可执行文件格式,可以在任意发行版的Linux操作系统上运行,比如Ubuntu, Debian, openSUSE, RHEL, CentOS, Fedora等。其原理是将可执行文件和依赖库打包为一个可执行文件。
详细介绍: AppImages官方文档
2. 下载制作工具-linuxdeploy
原地址:
wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
镜像地址:
wget https://github.91chi.fun/https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
下载后,添加执行权限:
sudo chmod +x linuxdeploy-x86_64.AppImage
3. 准备工作
制作AppImage文件需要一个.desktop
文件和icon
图标。
1. .desktop桌面文件
[Desktop Entry]
Name=HelloApp
Type=Application
Terminal=true
NoDisplay=true
Exec=hello
Icon=hello
Categories=Development;
需要修改项:
- Name: 生成的程序文件名称
- Terminal:如果为命令行程序则为true,如果为GUI则为false
- Exec:可执行文件名
- Icon:图标文件名,不包含后缀
详细见官方说明:desktop-entry-spec
2. icon图标
4. 制作Hello.AppImage程序
hello程序依赖于glib2.0库,执行后打印出Hello world
字符串。
当前目录结构:
.
├── hello
├── hello.desktop
├── hello.png
└── linuxdeploy-x86_64.AppImage
- hello: 可执行程序,依赖glib2.0库
- hello.desktop:桌面文件
- hello.png:图标文件
1. 自动分析依赖
这种情况下程序可以在本机正常运行,所依赖的库都已经安装,那么linuxdeploy可以自动分析依赖库,并打包为AppImage程序。
执行命令:
./linuxdeploy-x86_64.AppImage --appdir appdir -e ./hello -d ./hello.desktop -i ./hello.png --output appimage
- –appdir: 指定打包的临时目录名称
- -e: 指定要打包的可执行程序
- -d: 桌面文件
- -i: 图标文件
- –output: 输出目标格式,固定为
appimage
完成后会生成HelloApp-x86_64.AppImage
,即目标AppImage文件。
此时目录结构如下:
.
├── appdir
│ ├── AppRun -> usr/bin/hello
│ ├── hello.desktop -> usr/share/applications/hello.desktop
│ ├── hello.png -> usr/share/icons/hicolor/64x64/apps/hello.png
│ └── usr
│ ├── bin
│ │ └── hello
│ ├── lib
│ │ ├── libglib-2.0.so.0
│ │ └── libpcre.so.3
│ └── share
│ ├── applications
│ │ └── hello.desktop
│ ├── doc
│ │ └── libglib2.0-0
│ │ └── copyright
│ └── icons
│ └── hicolor
│ ├── 128x128
│ │ └── apps
│ ├── 16x16
│ │ └── apps
│ ├── 256x256
│ │ └── apps
│ ├── 32x32
│ │ └── apps
│ ├── 64x64
│ │ └── apps
│ │ └── hello.png
│ └── scalable
│ └── apps
├── hello
├── HelloApp-x86_64.AppImage
├── hello.desktop
├── hello.png
└── linuxdeploy-x86_64.AppImage
可以看到打包的临时目录appdir下会把程序依赖库打包进去。
2.手动添加依赖
- 生成打包临时目录
./linuxdeploy-x86_64.AppImage --appdir appdir -d hello.desktop -i hello.png
此时目录结构:
appdir/
├── hello.desktop -> usr/share/applications/hello.desktop
├── hello.png -> usr/share/icons/hicolor/64x64/apps/hello.png
└── usr
├── bin
├── lib
└── share
├── applications
│ └── hello.desktop
└── icons
└── hicolor
├── 128x128
│ └── apps
├── 16x16
│ └── apps
├── 256x256
│ └── apps
├── 32x32
│ └── apps
├── 64x64
│ └── apps
│ └── hello.png
└── scalable
└── apps
- 分析程序依赖
执行命令,查看库依赖项:
$ ldd hello
linux-vdso.so.1 (0x00007ffebc5fc000)
libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f5906d45000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5906b53000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f5906ae0000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5906abd000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5906e7e000)
-
将可执行程序及依赖的第三方库复制到打包对应的目录下
c库及系统库可以不用复制。 -
生成AppImage
./linuxdeploy-x86_64.AppImage --appdir appdir -d hello.desktop -i hello.png --output appimage