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

QGroundControl v5.0 源码编译实战:Ubuntu 22.04 生成 AppImage 与 NSIS 安装包 本文详细介绍了在Ubuntu 22.04环境下编译QGroundControl v5.0源码并生成AppImage(Linux)和NSIS(Windows)安装包的完整流程。涵盖环境配置、依赖安装、编译参数调整、常见问题解决等实战细节,帮助无人机开发者和高级用户快速掌握跨平台安装包生成技术。 阅读详情
AI摘要

本文介绍在 Ubuntu 20.04 上交叉编译 Qt 5 应用,使其可在 Windows 运行的方法。先准备交叉编译环境,安装基本依赖和 MinGW 工具链;再编译 Qt 5 交叉编译版本;接着用交叉编译工具编译项目;之后将文件复制到 Windows 运行;最后打包发布应用,避免在 Windows 开发的繁琐。

引言

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 生成工具: Ninja 或 Make

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. 创建安装包

可以使用 NSIS 或 Inno 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. 使用 cmake 或 qmake 进行编译。
  4. 传输 exe 到 Windows 并运行。
  5. 使用 windeployqt 打包所有依赖,使 exe 能在 Windows 上独立运行。

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

RK3588开发板Qt交叉编译环境搭建实战指南 本文详细介绍了在RK3588开发板上搭建Qt交叉编译环境的完整实战流程。从Ubuntu虚拟机准备、安装系统依赖,到获取ARM64交叉编译工具链和Qt 5.14.2源码,逐步指导完成配置、编译与安装。重点解析了关键配置参数、常见错误排查及模块单独编译方法,最终实现在x86主机上为RK3588 ARM架构编译可运行的Qt应用程序,显著提升嵌入式GUI开发效率。 阅读详情

相关推荐

在Rockchip RV1126上跑起第一个QT应用:从Windows开发到WSL2交叉编译的完整避坑记录

本文详细介绍了在Rockchip RV1126开发板上构建QT应用的全流程,包括Windows环境下的QT Creator开发、WSL2交叉编译环境搭建以及RV1126上的部署优化。重点解析了开发过程中常见的坑与解决方案,帮助开发者高效完成嵌入式QT应用的移植与调试。

weixin_30607659的博客 386

Ubuntu64 linux下配置Qt

Linux下配置Qt 先在下载好自己想装的Qt Linux 的版本http://download.qt.io/archive/qt/ 下载好的是 后缀为 .run格式 的文件 Qt在Linux系统里的安装要稍微复杂一些,因为Linux发行版众多,所以安装过程有些差异。 由于Linux系统都可以自行安装 GNU 工具集(对应Windows系统里的MinGW), 所以Qt在Linux系统里的...

shenmingyi.blog.youkuaiyun.com 829

Rockchip RV1126上跑起第一个QT应用:从Windows开发到WSL交叉编译的完整避坑记录

本文详细记录了在Rockchip RV1126平台上开发并部署QT应用的全过程,包括Windows+WSL环境搭建、交叉编译配置、依赖库处理以及开发板部署中的关键技巧和常见问题解决方案。特别针对RV1126嵌入式平台特性,提供了QT源码定制化编译、性能优化等实战经验,帮助开发者高效完成嵌入式QT应用开发。

weixin_30632883的博客 471

【QT】QT5.14.2 MinGW静态编译配置

1.QT5.14.2 下载地址 https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/ 注:安装时勾选Strawberry Perl可以跳过安装 Perl。 2.python下载地址 https://www.python.org/downloads/ python安装教程https://blog.csdn.net/weixin_31476015/article/details/113967501 3.activeperl脚本编译器下载地址 h

Roger_717的博客 2929

RK3506嵌入式Qt交叉编译环境搭建避坑指南

交叉编译是嵌入式Linux开发的核心技术,用于在x86宿主机上生成ARM平台可执行程序,其原理是通过专用工具链实现指令集与系统调用的跨平台转换。在瑞芯微RK3506等异构芯片上,Qt作为嵌入式GUI事实标准,其环境搭建涉及工具链选型、源码编译与部署调试,技术门槛较高。典型应用场景包括HMI人机界面、工业网关和串口屏替代方案。针对Ubuntu22.04宿主机,从工具链配置到Qt模块裁剪,每一步都需规避常见陷阱。本文基于RK3506平台,系统梳理Qt交叉编译的完整流程与实战避坑经验,帮助开发者高效完成环境部署。

weixin_34409357的博客 493

Ubuntu 20.04下Qt5.12.12交叉编译与eglfs部署

交叉编译是在一种架构上生成另一种架构可执行文件的基础技术,核心在于工具链、sysroot与目标ABI保持一致,否则会出现Exec format error或动态库加载失败。对嵌入式Linux而言,ARM64/AArch64平台常需用aarch64-linux-gnu工具链重建Qt等运行时,才能让上位机、HMI面板在目标板稳定运行。Qt5.12.12因moc/uic版本敏感,需在Ubuntu 20.04上对齐编译器、QPA插件与eglfs显示后端,并配置Qt Creator交叉Kits与GDB调试。围绕该链路

weixin_34013044的博客 328

【QT开发(2)】ubuntu QT 5.14.2实现Win10的开发:Cross Compile Qt – MinGW Windows Applications on a Linux Host

这将会编译一个名为hello.exe的Windows可执行文件,它可以在64位Windows系统上运行。

AbiUni(YY熊) 502

用简单仿真链路产生 WiFi CSI(不依赖专用工具箱,matlab实现)

这篇文章详细介绍了使用MATLAB仿真生成WiFi信道状态信息(CSI)的过程。内容包括:准备工作(定义OFDM和MIMO参数)、基本参数设置(天线数、FFT点数等)、构造训练OFDM符号、多径瑞利信道建模、逐天线时分发射接收处理、CSI信道估计方法,以及幅值和相位的可视化。通过BPSK调制和瑞利衰落信道仿真,实现了简单的CSI生成流程,为初学者理解CSI产生机理提供了直观指导。文章强调这仅是基础仿真,更深入的研究需要实际数据采集。文末还提供了WiFi指纹定位的相关参考资料。

静水流深,沧笙踏歌 1201

使用mingw编译VTK 和 在qt中使用vtk,mingw32-make输入到文件

win7下使用mingw编译VTK, qt下载地址 1.安装Qt和CMake工具 2.添加mingw所在的exe文件路径(D:\Qt\Qt5.6.0\Tools\mingw492_32\bin) 到系统环境变量PATH 3.解压VTK-7.1.1.zip到F:\VTK-7.1\VTK-src下 4.新建F:\VTK-7.1\VTK-bin //5、6步骤不加也可以 5.修改VTK-src...

yuxing55555的博客 2382

物联网开发笔记(34)- 使用Micropython开发ESP32开发板之控制步进电机(28BYJ-48)

使用Micropython开发ESP32开发板之控制步进电机(28BYJ-48)

zhusongziye的博客 1万+

EfficientNet中的MBConv模块详解:为什么它能如此高效?

本文深度解析了EfficientNet中的MBConv模块,详细介绍了其核心设计理念、效率优化技术和复合缩放理论。MBConv通过深度可分离卷积、倒残差结构和注意力机制三大关键技术,实现了计算效率与模型性能的平衡,成为高效网络结构设计的典范。

tcp8optimizer的博客 343

Ubuntu编译生成Windows的C程序

Ubuntu编译生成Windows的C程序 安装mingw-w64 $ sudo apt update #更新源 $ sudo apt install mingw-w64 #安装mingw-w64 编译 编一个简单的C语言程序,如: #include<stdio.h> #include<stdlib.h> int main(void) { printf("你好,世界...

weixin_44443882的博客 1073

《计算机网络》课程大作业- 《小区局域网的设计和规划》

8.1首先,在满足用户需求方面,通过详细的需求分析,充分考虑了居民和物业管理的不同业务需求。对于居民,无论是日常的高清视频播放、在线游戏、远程办公还是智能家居设备的连接,网络都能提供稳定的高速带宽支持。从有线网络的千兆以太网技术保障稳定的有线连接,到无线网络采用 Wi - Fi 6 技术确保无线覆盖区域的高速和低延迟,满足了居民多样化的娱乐和生活需求。对于物业管理,安防监控系统的实时数据传输、物业办公自动化系统的流畅运行以及社区信息的及时发布等业务,都有针对性的网络设计。

lisangsimida的博客 2598

在Ubuntu20.04上交叉编译能在Windows上运行的Qt5应用

在Ubuntu20.04上交叉编译能在Windows上运行的Qt5应用

daqinzl的专栏 755

Halcon实战:5分钟搞定灰度图转热力图(附完整代码)

本文提供了一份Halcon实战指南,详细讲解如何在5分钟内将灰度图转换为直观的热力图。通过核心代码演示了利用HSV颜色模型进行色彩映射的原理与步骤,包括图像归一化、通道构建与空间转换,并附赠了深度图可视化等进阶应用技巧,帮助工程师快速提升图像分析效果。

weixin_29240343的博客 282

一文告诉你:如何在trae中编译运行STM32程序,并让AI帮你修改代码

本文详细介绍了如何将STM32程序从Keil迁移到国产免费工具Trae,并利用AI进行代码修改的全过程。

水滴爬呀爬 4877

Ubuntu 20.04下aarch64静态交叉编译Qt 5.14.2全指南

静态交叉编译是嵌入式Linux环境下部署Qt应用的核心技术,其本质是将Qt库、C++运行时(如libstdc++.so.6)、系统依赖(如libpthread.a)全部链接进单一可执行文件,彻底规避目标板动态库缺失、ABI不兼容等典型问题。该技术广泛应用于ARM64架构的工业HMI、边缘网关与车载终端开发,尤其适配Rockchip、i.MX8等无包管理器的精简系统。其关键价值在于实现‘拷贝即运行’的零依赖部署,支撑qt打包成可执行程序、qt发布软件等工程刚需。本文聚焦Ubuntu-20.04安装qt交叉编译

weixin_34198762的博客 322

L298N电机驱动模块的接线使用与代码实现

#include "iostm8s208mb.h" #define u8 uint8_t #define u16 uint16_t #define u32 uint32_t typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t; // 关于LED灯的宏定义 #define LED2 PI_ODR_ODR2 //输出量 #define LE

Clichong 13万+

保姆级教程:在Ubuntu 20.04上为全志H5开发板交叉编译Qt5.12.11(含完整配置脚本)

本文提供在Ubuntu 20.04上为全志H5开发板交叉编译Qt5.12.11的完整指南,涵盖环境配置、工具链设置、源码定制、自动化脚本开发及部署实战。通过详细步骤和问题排查技巧,帮助开发者高效完成ARM Cortex-A53架构的Qt移植,适用于嵌入式应用开发。

weixin_30325487的博客 405

[Dify] 如何构建一个带评分功能的 Dify AI 教练系统

本文介绍如何利用Dify开源平台构建具备自动评分功能的AI教练系统。系统通过Prompt设计AI教练角色,使用OpenAPI定义评分工具接口,结合工作流编排实现提问、回答收集、评分和反馈的全流程。文章详细讲解了从AI教练身份设定、多维度评分标准设计到前端可视化展示的实现方法,并提供了可扩展建议,适用于语言训练、面试模拟等多种场景。该系统展示了Dify平台在构建智能化评估应用方面的优势,实现零代码开发专业AI教练解决方案。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 332

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

保姆级教程:在Ubuntu 20.04上为全志H5开发板交叉编译Qt5.12.11(附完整配置脚本)

本文提供全志H5开发板Qt5.12.11交叉编译的保姆级教程,详细讲解从环境准备到编译优化的全过程。针对ARM_aarch64架构的CortexA53芯片进行特别优化,包含完整配置脚本和常见问题解决方案,帮助开发者快速搭建嵌入式Qt开发环境。

weixin_30740295的博客 384

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Ubuntu虚拟机开发rk3399平台qt5应用程序环境傻瓜式搭建流程

本教程的主要目的是实现在windows上面利用虚拟机开发基于arm架构的rk3399平台的ubuntu系统qt应用

weiyanbi8673的博客 3956

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

3:Ubuntu上配置QT交叉编译环境并编译QT程序到Jetson Orin Nano(ARM)

Ubuntu上配置QT交叉编译环境并编译QT程序到Jetson Orin Nano(ARM)

亦已焉哉 4330

QT creator 3.4.1配置arm交叉编译环境(QT5.4.2)

QT creator 3.4.1配置arm交叉编译环境(QT5.4.2) 本人基于Ubuntu 14.04 LTS版本安装的,费话好说,直接进入主题。 1 安装Qt Creator 3.4.1 这里没有什么好说的,到QT官网下载,并且安装。以下是本人的安装版本。 2 配置交叉编译环境 2.1 安装好交叉编译链的工具并且配置好环境变量。网上很多资料,需要注意的是,别忘记了sou

ye888的专栏 1414
上一篇: 在 Ubuntu 20.04 上交叉编译 Qt 5 应用,使其可在 Windows 运行
下一篇: 芯片为什么需要初始引导程序?——ROM的作用、机制与实现
嵌入式孙老师
博客等级 码龄7年 5686粉丝 898原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值