在 CentOS 上制作 AppImage 并不是“编译系统”的事,而是把已经能运行的程序 + 依赖库 + 启动脚本打包成一个可执行文件。下面从原理 → 环境准备 → 实战步骤一步步说明,适合 CentOS 7 / 8 / Stream。
AppImage = 目录结构 + AppRun + 运行时依赖 + 压缩文件系统
核心结构:
YouApp.AppDir/
├── AppRun # 入口脚本(必须可执行)
├── yourapp.desktop # 桌面文件
├── yourapp.png # 图标
├── usr/
│ ├── bin/yourapp
│ └── lib/... # 依赖库
然后使用 appimagetool 打包成 .AppImage
sudo yum install -y fuse fuse-libs wget patchelf
如果是 CentOS 8 / Stream:
sudo dnf install -y fuse fuse-libs wget patchelf
wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
chmod +x appimagetool-x86_64.AppImage
sudo mv appimagetool-x86_64.AppImage /usr/local/bin/appimagetool
假设你的程序是:
/usr/local/bin/myapp
mkdir -p MyApp.AppDir/usr/bin
cp /usr/local/bin/myapp MyApp.AppDir/usr/bin/
ldd /usr/local/bin/myapp
把输出中的 .so 文件复制进:
MyApp.AppDir/usr/lib/
或使用工具自动化:
wget https://github.com/AppImage/AppImageKit/releases/download/continuous/linuxdeploy-x86_64.AppImage
chmod +x linuxdeploy-x86_64.AppImage
./linuxdeploy-x86_64.AppImage \
--appdir MyApp.AppDir \
--executable /usr/local/bin/myapp
✅ 它会自动复制依赖
cat > MyApp.AppDir/AppRun << 'EOF'
#!/bin/bash
HERE="$(dirname "$(readlink -f "${0}")")"
exec "$HERE/usr/bin/myapp" "$@"
EOF
chmod +x MyApp.AppDir/AppRun
cat > MyApp.AppDir/myapp.desktop << 'EOF'
[Desktop Entry]
Name=MyApp
Exec=myapp
Icon=myapp
Type=Application
Categories=Utility;
EOF
cp myapp.png MyApp.AppDir/myapp.png
appimagetool MyApp.AppDir
成功后会生成:
MyApp-x86_64.AppImage
./MyApp-x86_64.AppImage
如果提示 fuse 错误:
sudo modprobe fuse
或:
./MyApp-x86_64.AppImage --appimage-extract
✅ glibc 版本问题
✅ 不要依赖系统 PATH
✅ Qt / GTK 程序
plugins、platformslinuxdeploy + 插件(Qt、GTK)AppImageBuilder(YAML 方式)如果你愿意,可以告诉我:
我可以直接给你一套可用的打包模板。