在 Ubuntu 20.04 上交叉编译 Qt 5 应用,使其可在 Windows 运行

devtools/2025/3/9 20:59:13/

引言

Qt 作为一个跨平台的 GUI 框架,支持在 Linux、Windows、macOS 等多个操作系统上运行。然而,如果你的开发环境是 Ubuntu 20.04,但最终的应用需要运行在 Windows 上,那么你需要使用 交叉编译 来生成可在 Windows 上运行的 exe 文件。

本文将详细介绍如何在 Ubuntu 20.04 上 交叉编译 Qt 5 应用程序,并生成可以直接在 Windows 上运行的 .exe 文件。

在这里插入图片描述


一、准备交叉编译环境

1. 安装基本依赖

首先,确保你的 Ubuntu 20.04 系统已经安装了 Qt 5。

sudo apt update
sudo apt install qt5-default qtcreator qtbase5-dev

2. 安装 MinGW 交叉编译工具链

为了编译 Windows 可执行文件(.exe),我们需要 MinGW 交叉编译工具:

sudo apt install mingw-w64

安装完成后,检查 MinGW 是否可用:

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):

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 交叉编译环境:

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

执行编译和安装:

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 生成工具: NinjaMake

2. 使用 CMake 进行交叉编译

如果你的 Qt 项目使用 CMake,可以创建 CMakeLists.txt 并交叉编译:

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)

然后,运行:

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 计算机:

scp myapp.exe user@windows-ip:/C/Users/user/Desktop/

2. 运行 exe 文件

在 Windows 上双击 myapp.exe,如果 Qt 依赖项正确,程序应能运行。

如果程序报错 “缺少 DLL”,你需要将 Qt 的动态库文件(如 Qt5Core.dll, Qt5Widgets.dll)复制到 exe 所在目录,或者使用 windeployqt 进行打包:

windeployqt myapp.exe

五、打包和发布 Windows 版 Qt 应用

1. 生成独立的 Windows 可执行文件

如果你希望在没有安装 Qt 的 Windows 电脑上运行 exe 文件,你可以使用 windeployqt 来收集所有必要的 DLL 文件。

在 Windows 机器上,运行:

C:\Qt\5.15.2\mingw81_64\bin\windeployqt.exe myapp.exe

这将把所有 Qt 依赖项复制到 exe 目录,使其成为独立应用。

2. 创建安装包

可以使用 NSISInno Setup 创建 Windows 安装包,以便用户轻松安装你的应用。

示例 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 文件。

关键步骤包括:

  1. 安装 MinGW 交叉编译工具链。
  2. 配置 Qt 5 交叉编译环境。
  3. 使用 cmakeqmake 进行编译。
  4. 传输 exe 到 Windows 并运行。
  5. 使用 windeployqt 打包所有依赖,使 exe 能在 Windows 上独立运行。

按照本指南,你可以高效地在 Linux 上构建 Windows 版 Qt 应用,避免在 Windows 上开发的繁琐流程!


http://www.ppmy.cn/devtools/165848.html

相关文章

DeepSeek R1-32B医疗大模型的完整微调实战分析(全码版)

DeepSeek R1-32B微调实战指南 ├── 1. 环境准备 │ ├── 1.1 硬件配置 │ │ ├─ 全参数微调:4*A100 80GB │ │ └─ LoRA微调:单卡24GB │ ├── 1.2 软件依赖 │ │ ├─ PyTorch 2.1.2+CUDA │ │ └─ Unsloth/ColossalAI │ └── 1.3 模…

Kubernetes中的 iptables 规则介绍

#作者:邓伟 文章目录 一、Kubernetes 网络模型概述二、iptables 基础知识三、Kubernetes 中的 iptables 应用四、查看和调试 iptables 规则五、总结 在 Kubernetes 集群中,iptables 是一个核心组件, 用于实现服务发现和网络策略。iptables 通…

【简单的C++围棋游戏开发示例】

C围棋游戏开发简单示例&#xff08;控制台版&#xff09; ‌核心代码实现‌ #include <iostream> #include <vector> #include <queue> using namespace std;const int SIZE 9; // 简化棋盘为9x9‌:ml-citation{ref"1" data"citationList&…

国科大——数据挖掘(0812课程)——考试真题

前沿&#xff1a; 此文章记录了国科大数据挖掘&#xff08;0812&#xff09;课程的考试真题。 注&#xff1a; 考试可以携带计算器&#xff0c;毕竟某些题需要计算log&#xff0c;比如&#xff1a;决策树等。 2016年 1. Suppose a hospital tested the age and body fat for …

人工智能里的深度学习指的是什么?

深度学习&#xff08;Deep Learning, 简称DL&#xff09;是机器学习领域的一个重要分支&#xff0c;它通过构建和训练深层神经网络模型&#xff0c;从大量数据中自动学习和提取特征&#xff0c;以实现复杂任务的自动化处理和决策。以下是关于深度学习的详细介绍&#xff1a; 一…

【含文档+PPT+源码】基于Python的美食数据的设计与实现

项目介绍 本课程演示的是一款基于Python的美食数据分析系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 带你从零开始部署运行本套系统 该项目附带的源码…

感受数字经济春潮涌动——中电联数字经济专委会理事长刘九如一行调研北京国信华源科技公司

早春二月&#xff0c;春潮涌动。中国电子信息行业联合会数字经济专委会理事长、国创会数字经济研究院专家委主任刘九如2月21日专程赴北京国信华源科技有限公司&#xff08;以下简称国信华源&#xff09;调研&#xff0c;深入了解数字技术在水利设施及自然灾害监测预警领域的深入…

Ollama在AutoDL部署,CPU服务器做代理,实践中

## 我有两台服务器&#xff0c;一台是GPU服务器&#xff0c;另一台是CPU服务器&#xff1b; ## 我在GPU服务器上安装了Ollama&#xff0c;然后通过命令映射端口到CPU服务器&#xff1a; ssh -CNg -L 0.0.0.0:11434:127.0.0.1:11434 rootconnect.westb.seetacloud.com -p 34016…