Windows x86 架构下 Ubuntu 虚拟机内打包 Qt 文件指南

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. Windows 主机系统
  2. Ubuntu 虚拟机(x86 架构)
  3. 已安装 Qt 开发环境
  4. 已编译完成的 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

相关推荐
ghking13 小时前
ubuntu下部署大模型显存被其它程序占用问题解决
ubuntu·大模型·gnome·nvidia-smi·xorg·remote-desktop
数据法师3 小时前
Wise Force Deleter:专门解决Windows文件“无法删除”问题的免费工具
windows
灰灰老师4 小时前
Ubuntu 24.04 使用 Nginx + Docker Tomcat9 + HTTPS 完整部署教程
nginx·ubuntu·docker
江公望4 小时前
Qt Q_OBJECT宏,5分钟讲清楚
qt
学习中.........4 小时前
Windows 上用 cc-connect 接入 Telegram + Codex:从零跑通与避坑指南
windows
铁手飞鹰4 小时前
PyModbus API对应的功能码和报文
linux·windows·python·modbus rtu·pymodbus
idolao4 小时前
helium_0.11.5.1_x64-installer浏览器安装步骤详解(附Helium浏览器配置与隐私设置)
windows
爱宇阳5 小时前
Windows 11 右键菜单恢复经典样式完整指南
windows
小灰灰搞电子5 小时前
PyQt QtWaitingSpinner详解-为你的 Qt 程序带来丝滑等待动画
开发语言·qt·pyqt