Windows x86 架构下 Ubuntu 虚拟机内打包 Qt 文件指南
-
- 前提条件
- [第一步:确认 Qt 环境](#第一步:确认 Qt 环境)
-
- [1.1 检查 Qt 版本](#1.1 检查 Qt 版本)
- [1.2 查找 Qt 安装路径](#1.2 查找 Qt 安装路径)
- [1.3 查看 Qt 目录结构](#1.3 查看 Qt 目录结构)
- 第二步:准备应用程序
-
- [2.1 编译 Release 版本](#2.1 编译 Release 版本)
- [2.2 或使用 cmake 编译](#2.2 或使用 cmake 编译)
- [2.3 定位可执行文件](#2.3 定位可执行文件)
- 第三步:创建打包目录
-
- [3.1 创建打包文件夹](#3.1 创建打包文件夹)
- [3.2 复制可执行文件](#3.2 复制可执行文件)
- [第四步:使用 linuxdeployqt 打包](#第四步:使用 linuxdeployqt 打包)
-
- [4.1 安装 linuxdeployqt](#4.1 安装 linuxdeployqt)
- [4.2 打包应用程序](#4.2 打包应用程序)
- [4.3 打包输出示例](#4.3 打包输出示例)
- 第五步:手动打包方法(备用方案)
-
- [5.1 创建脚本](#5.1 创建脚本)
- [5.2 复制以下脚本内容](#5.2 复制以下脚本内容)
- [5.3 执行脚本](#5.3 执行脚本)
- 第六步:验证依赖库
-
- [6.1 查看应用程序依赖](#6.1 查看应用程序依赖)
- [6.2 查找缺失库](#6.2 查找缺失库)
- [6.3 复制缺失的库](#6.3 复制缺失的库)
- [第七步:创建 .desktop 文件(可选)](#第七步:创建 .desktop 文件(可选))
-
- [7.1 创建桌面快捷方式文件](#7.1 创建桌面快捷方式文件)
- [7.2 添加以下内容](#7.2 添加以下内容)
- [7.3 安装到系统](#7.3 安装到系统)
- 第八步:创建安装包(可选)
-
- [8.1 创建 tar.gz 压缩包](#8.1 创建 tar.gz 压缩包)
- [8.2 创建 deb 安装包(高级)](#8.2 创建 deb 安装包(高级))
- 常见问题及解决方案
-
- [问题1:找不到 libqxcb.so](#问题1:找不到 libqxcb.so)
- 问题2:字体显示异常
- [问题3:AppImage 无法运行](#问题3:AppImage 无法运行)
- [问题4:缺少 libstdc++ 库](#问题4:缺少 libstdc++ 库)
- 完整打包脚本示例
- 快速参考命令
- 参考资料
前提条件
- Windows 主机系统
- Ubuntu 虚拟机(x86 架构)
- 已安装 Qt 开发环境
- 已编译完成的 Qt 应用程序
第一步:确认 Qt 环境
1.1 检查 Qt 版本
bash
qmake -v
说明:查看当前 Qt 安装版本和路径信息。
1.2 查找 Qt 安装路径
bash
which qmake
说明 :确认 qmake 的具体安装位置,例如 /usr/lib/qt5/bin/qmake 或 /opt/Qt/...
1.3 查看 Qt 目录结构
bash
ls -la /usr/lib/qt5/
# 或如果是自定义安装路径
ls -la /opt/Qt/
第二步:准备应用程序
2.1 编译 Release 版本
bash
cd /path/to/your/project
qmake
make clean
make
说明:
- 首先进入项目目录
- 使用 qmake 生成 Makefile
- 清理之前的编译文件
- 编译 Release 版本
2.2 或使用 cmake 编译
bash
cd /path/to/your/project
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j$(nproc)
说明:如果项目使用 cmake 构建系统,使用此命令。
2.3 定位可执行文件
bash
find . -name "*.so" -o -name "your_app_name"
说明:找到编译后的可执行文件位置。
第三步:创建打包目录
3.1 创建打包文件夹
bash
mkdir -p ~/deploy/MyApp
cd ~/deploy/MyApp
说明:在用户目录下创建专门用于打包的文件夹。
3.2 复制可执行文件
bash
cp /path/to/your/project/your_app_name ~/deploy/MyApp/
说明:将编译好的可执行文件复制到打包目录。
第四步:使用 linuxdeployqt 打包
4.1 安装 linuxdeployqt
bash
# 下载 linuxdeployqt
wget https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage
# 添加执行权限
chmod +x linuxdeployqt-continuous-x86_64.AppImage
# 移动到系统路径
sudo mv linuxdeployqt-continuous-x86_64.AppImage /usr/local/bin/linuxdeployqt
说明:linuxdeployqt 是专门用于打包 Linux Qt 应用的工具。
4.2 打包应用程序
bash
cd ~/deploy/MyApp
linuxdeployqt your_app_name -appimage
说明:
your_app_name是你的可执行文件名-appimage参数会生成 AppImage 格式的单文件可执行程序- 打包成功后会生成
.AppImage文件
4.3 打包输出示例
linuxdeployqt 6 (commit X) - Continuous build
...
AppImage created successfully!
说明:看到此提示表示打包成功。
第五步:手动打包方法(备用方案)
如果 linuxdeployqt 不可用,可使用以下手动方法:
5.1 创建脚本
bash
nano ~/deploy/MyApp/deploy.sh
5.2 复制以下脚本内容
bash
#!/bin/bash
# 应用程序名称
APP_NAME="your_app_name"
# Qt 安装路径(根据实际情况修改)
QT_PATH="/usr/lib/qt5"
# 创建 lib 目录
mkdir -p lib
# 复制可执行文件
cp ../$APP_NAME .
# 复制 Qt 依赖库
cp $QT_PATH/lib/libQt5Core.so* lib/
cp $QT_PATH/lib/libQt5Gui.so* lib/
cp $QT_PATH/lib/libQt5Widgets.so* lib/
cp $QT_PATH/lib/libQt5Network.so* lib/
cp $QT_PATH/lib/libQt5PrintSupport.so* lib/
cp $QT_PATH/lib/libQt5Svg.so* lib/
cp $QT_PATH/lib/libQt5X11Extras.so* lib/
# 复制平台插件
mkdir -p plugins/platforms
cp $QT_PATH/plugins/platforms/libqxcb.so plugins/platforms/
# 复制其他必要的插件
mkdir -p plugins/imageformats
cp $QT_PATH/plugins/imageformats/libqico.so plugins/imageformats/
cp $QT_PATH/plugins/imageformats/libqjpeg.so plugins/imageformats/
cp $QT_PATH/plugins/imageformats/libqsvg.so plugins/imageformats/
cp $QT_PATH/plugins/imageformats/libqtiff.so plugins/imageformats/
# 创建启动脚本
cat > $APP_NAME.sh << 'EOF'
#!/bin/bash
APPDIR=$(dirname "$(readlink -f "$0")")
export LD_LIBRARY_PATH=$APPDIR/lib:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=$APPDIR/plugins:$QT_PLUGIN_PATH
$APPDIR/$APP_NAME "$@"
EOF
chmod +x $APP_NAME.sh
echo "打包完成!"
echo "使用 ./$APP_NAME.sh 启动应用程序"
5.3 执行脚本
bash
chmod +x ~/deploy/MyApp/deploy.sh
cd ~/deploy/MyApp
./deploy.sh
第六步:验证依赖库
6.1 查看应用程序依赖
bash
ldd ~/deploy/MyApp/your_app_name
说明:检查可执行文件依赖的所有共享库,确保没有缺失。
6.2 查找缺失库
bash
ldd ~/deploy/MyApp/your_app_name | grep "not found"
说明:如果输出不为空,说明有缺失的库需要补充。
6.3 复制缺失的库
bash
# 根据上一步输出的缺失库,复制到 lib 目录
cp /path/to/missing/library.so ~/deploy/MyApp/lib/
第七步:创建 .desktop 文件(可选)
7.1 创建桌面快捷方式文件
bash
nano ~/deploy/MyApp/MyApp.desktop
7.2 添加以下内容
ini
[Desktop Entry]
Version=1.0
Type=Application
Name=My Application
Comment=My Qt Application
Exec=/path/to/deploy/MyApp/your_app_name.sh
Icon=/path/to/deploy/MyApp/your_icon.png
Terminal=false
Categories=Application;Development;
7.3 安装到系统
bash
sudo cp ~/deploy/MyApp/MyApp.desktop /usr/share/applications/
说明:这样应用程序会出现在系统的应用程序菜单中。
第八步:创建安装包(可选)
8.1 创建 tar.gz 压缩包
bash
cd ~/deploy
tar -czf MyApp-1.0-linux-x86.tar.gz MyApp/
说明:创建通用的压缩包,用户解压后即可使用。
8.2 创建 deb 安装包(高级)
bash
# 安装打包工具
sudo apt install dpkg-dev
# 创建打包目录结构
mkdir -p ~/debpackage/myapp_1.0/DEBIAN
mkdir -p ~/debpackage/myapp_1.0/opt/myapp
mkdir -p ~/debpackage/myapp_1.0/usr/share/applications
# 复制文件
cp -r ~/deploy/MyApp/* ~/debpackage/myapp_1.0/opt/myapp/
# 创建 control 文件
cat > ~/debpackage/myapp_1.0/DEBIAN/control << 'EOF'
Package: myapp
Version: 1.0
Architecture: amd64
Maintainer: Your Name <your.email@example.com>
Description: My Qt Application
A brief description of your application
EOF
# 构建 deb 包
dpkg-deb --build ~/debpackage/myapp_1.0 ~/deploy/MyApp_1.0_amd64.deb
常见问题及解决方案
问题1:找不到 libqxcb.so
解决方案:
bash
find /usr -name libqxcb.so
# 将找到的文件复制到 platforms 目录
cp /usr/lib/qt5/plugins/platforms/libqxcb.so ~/deploy/MyApp/plugins/platforms/
问题2:字体显示异常
解决方案:
bash
# 复制中文字体
mkdir -p ~/deploy/MyApp/fonts
cp /usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf ~/deploy/MyApp/fonts/
# 在启动脚本中添加
export QT_QPA_FONTDIR=$APPDIR/fonts
问题3:AppImage 无法运行
解决方案:
bash
# 添加执行权限
chmod +x *.AppImage
# 尝试运行
./YourApp.AppImage --appimage-extract-and-run
问题4:缺少 libstdc++ 库
解决方案:
bash
# 安装 C++ 标准库
sudo apt install libstdc++6
# 复制到打包目录
cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ~/deploy/MyApp/lib/
完整打包脚本示例
以下是一个完整的自动化打包脚本:
bash
#!/bin/bash
# ============================================
# Qt Linux 自动打包脚本
# ============================================
# 配置参数
APP_NAME="your_app_name"
PROJECT_DIR="/path/to/your/project"
DEPLOY_DIR="$HOME/deploy/$APP_NAME"
QT_PATH="/usr/lib/qt5"
echo "========================================="
echo "开始打包 Qt 应用程序"
echo "========================================="
# 1. 编译项目
echo "[1/5] 编译项目..."
cd "$PROJECT_DIR"
make clean
qmake
make -j$(nproc)
if [ $? -ne 0 ]; then
echo "错误:编译失败!"
exit 1
fi
# 2. 创建打包目录
echo "[2/5] 创建打包目录..."
rm -rf "$DEPLOY_DIR"
mkdir -p "$DEPLOY_DIR"/{lib,plugins/{platforms,imageformats,formats}}
# 3. 复制可执行文件
echo "[3/5] 复制可执行文件..."
find "$PROJECT_DIR" -name "$APP_NAME" -executable -type f -exec cp {} "$DEPLOY_DIR/" \;
# 4. 复制依赖库
echo "[4/5] 复制依赖库..."
# 获取所有依赖库
ldd "$DEPLOY_DIR/$APP_NAME" | grep "Qt" | awk '{print $3}' | xargs -I {} cp {} "$DEPLOY_DIR/lib/" 2>/dev/null
# 复制核心 Qt 库
cp $QT_PATH/lib/libQt5Core.so* $DEPLOY_DIR/lib/
cp $QT_PATH/lib/libQt5Gui.so* $DEPLOY_DIR/lib/
cp $QT_PATH/lib/libQt5Widgets.so* $DEPLOY_DIR/lib/
cp $QT_PATH/lib/libQt5Network.so* $DEPLOY_DIR/lib/
cp $QT_PATH/lib/libQt5PrintSupport.so* $DEPLOY_DIR/lib/
cp $QT_PATH/lib/libQt5X11Extras.so* $DEPLOY_DIR/lib/
cp $QT_PATH/lib/libQt5DBus.so* $DEPLOY_DIR/lib/
cp $QT_PATH/lib/libQt5XcbQpa.so* $DEPLOY_DIR/lib/
# 复制平台插件
cp $QT_PATH/plugins/platforms/libqxcb.so $DEPLOY_DIR/plugins/platforms/
# 5. 创建启动脚本
echo "[5/5] 创建启动脚本..."
cat > "$DEPLOY_DIR/$APP_NAME.sh" << EOF
#!/bin/bash
APPDIR=\$(dirname "\$(readlink -f "\$0")")
export LD_LIBRARY_PATH=\$APPDIR/lib:\$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=\$APPDIR/plugins:\$QT_PLUGIN_PATH
\$APPDIR/$APP_NAME "\$@"
EOF
chmod +x "$DEPLOY_DIR/$APP_NAME.sh"
# 6. 创建压缩包
echo "创建发布包..."
cd "$DEPLOY_DIR/.."
tar -czf "${APP_NAME}-$(date +%Y%m%d)-linux-x86.tar.gz" "$APP_NAME/"
echo "========================================="
echo "打包完成!"
echo "输出目录: $DEPLOY_DIR"
echo "启动方式: $DEPLOY_DIR/$APP_NAME.sh"
echo "========================================="
快速参考命令
| 操作 | 命令 |
|---|---|
| 编译项目 | qmake && make |
| 查看依赖 | ldd your_app |
| 使用 linuxdeployqt | linuxdeployqt your_app -appimage |
| 添加执行权限 | chmod +x your_file |
| 创建压缩包 | tar -czf output.tar.gz folder/ |
| 解压压缩包 | tar -xzf file.tar.gz |
参考资料
创建日期 : 2026-05-08
适用环境 : Ubuntu x86 (虚拟机)
Qt 版本: Qt5 / Qt6