引言
Qt 作为一个跨平台的 GUI 框架,支持在 Linux、Windows、macOS 等多个操作系统上运行。然而,如果你的开发环境是 Ubuntu 20.04 ,但最终的应用需要运行在 Windows 上,那么你需要使用 交叉编译 来生成可在 Windows 上运行的 exe
文件。
本文将详细介绍如何在 Ubuntu 20.04 上 交叉编译 Qt 5 应用程序 ,并生成可以直接在 Windows 上运行的 .exe
文件。

一、准备交叉编译环境
1. 安装基本依赖
首先,确保你的 Ubuntu 20.04 系统已经安装了 Qt 5。
bash
sudo apt update
sudo apt install qt5-default qtcreator qtbase5-dev
2. 安装 MinGW 交叉编译工具链
为了编译 Windows 可执行文件(.exe
),我们需要 MinGW 交叉编译工具:
bash
sudo apt install mingw-w64
安装完成后,检查 MinGW 是否可用:
bash
i686-w64-mingw32-gcc --version # 32 位
x86_64-w64-mingw32-gcc --version # 64 位
如果命令能够正确输出版本号,则 MinGW 交叉编译器安装成功。
二、编译 Qt 5 交叉编译版本
Qt 需要与交叉编译工具链匹配,默认的 Qt 版本是针对 Linux 运行的,因此我们需要编译一个 Windows 版本的 Qt 5。
1. 下载 Qt 5 源码
首先,获取 Qt 5 源代码(建议使用 Qt 5.15.2):
bash
mkdir -p ~/qt5-win64-cross && cd ~/qt5-win64-cross
git clone --branch 5.15.2 --depth 1 https://github.com/qt/qt5.git
cd qt5
perl init-repository --module-subset=qtbase,qttools,qtdeclarative,qtsvg,qtx11extras
2. 配置 Qt 交叉编译环境
使用 configure
命令配置 Windows 交叉编译环境:
bash
mkdir build-win64 && cd build-win64
../configure \
-prefix $HOME/qt5-win64-cross \
-xplatform win32-g++ \
-release \
-static \
-opensource \
-confirm-license \
-nomake tests \
-nomake examples \
-opengl desktop \
-device-option CROSS_COMPILE=x86_64-w64-mingw32-
3. 编译并安装 Qt 5
执行编译和安装:
bash
make -j$(nproc)
sudo make install
安装完成后,你的 Qt 交叉编译环境就准备好了!
三、使用交叉编译工具编译 Qt 5 项目
1. 设置 Qt 交叉编译工具链
在 qtcreator
中,添加一个新的 Qt Kit,指定交叉编译器路径。
- 编译器(C++) :
/usr/bin/x86_64-w64-mingw32-g++
- 编译器(C) :
/usr/bin/x86_64-w64-mingw32-gcc
- Qt 版本 : 选择
~/qt5-win64-cross
- CMake 生成工具 :
Ninja
或Make
2. 使用 CMake 进行交叉编译
如果你的 Qt 项目使用 CMake
,可以创建 CMakeLists.txt
并交叉编译:
cmake
cmake_minimum_required(VERSION 3.10)
project(MyQtApp)
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
set(QT5_DIR ~/qt5-win64-cross)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
add_executable(myapp main.cpp)
target_link_libraries(myapp Qt5::Widgets)
然后,运行:
bash
mkdir build-win64 && cd build-win64
cmake .. -DCMAKE_TOOLCHAIN_FILE=../toolchain-mingw.cmake
make -j$(nproc)
这将生成一个 Windows 可执行文件 myapp.exe
。
四、将 exe
复制到 Windows 并运行
1. 复制 exe
文件到 Windows
你可以使用 scp
命令或 USB 设备将 myapp.exe
传输到 Windows 计算机:
bash
scp myapp.exe user@windows-ip:/C/Users/user/Desktop/
2. 运行 exe
文件
在 Windows 上双击 myapp.exe
,如果 Qt 依赖项正确,程序应能运行。
如果程序报错 "缺少 DLL" ,你需要将 Qt 的动态库文件(如 Qt5Core.dll
, Qt5Widgets.dll
)复制到 exe
所在目录,或者使用 windeployqt
进行打包:
shell
windeployqt myapp.exe
五、打包和发布 Windows 版 Qt 应用
1. 生成独立的 Windows 可执行文件
如果你希望在没有安装 Qt 的 Windows 电脑上运行 exe
文件,你可以使用 windeployqt
来收集所有必要的 DLL 文件。
在 Windows 机器上,运行:
shell
C:\Qt\5.15.2\mingw81_64\bin\windeployqt.exe myapp.exe
这将把所有 Qt 依赖项复制到 exe
目录,使其成为独立应用。
2. 创建安装包
可以使用 NSIS
或 Inno Setup
创建 Windows 安装包,以便用户轻松安装你的应用。
示例 NSIS
脚本:
nsis
Outfile "MyQtAppInstaller.exe"
InstallDir "$PROGRAMFILES\MyQtApp"
Section "Install"
SetOutPath "$INSTDIR"
File "myapp.exe"
File "Qt5Core.dll"
File "Qt5Widgets.dll"
SectionEnd
总结
通过本文的方法,你可以在 Ubuntu 20.04 上交叉编译 Qt 5 ,生成可在 Windows 上运行的 .exe
文件。
关键步骤包括:
- 安装 MinGW 交叉编译工具链。
- 配置 Qt 5 交叉编译环境。
- 使用
cmake
或qmake
进行编译。 - 传输
exe
到 Windows 并运行。 - 使用
windeployqt
打包所有依赖,使exe
能在 Windows 上独立运行。
按照本指南,你可以高效地在 Linux 上构建 Windows 版 Qt 应用,避免在 Windows 上开发的繁琐流程!