You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Linux下交叉编译C++程序至Windows(基于qmake、make与MXE)

用MXE在Ubuntu 16.04交叉编译C++程序到Windows 32/64位

我来帮你梳理一套完整的操作步骤,应该能解决你之前遇到的依赖库缺失问题——毕竟MXE就是用来统一管理交叉编译依赖的,只要步骤对了就不用再头疼各种库的适配问题了。

1. 先安装MXE的基础依赖

Ubuntu 16.04上需要先装好编译MXE本身的工具包,打开终端执行:

sudo apt-get update && sudo apt-get install build-essential git libtool autoconf automake pkg-config mingw-w64

2. 克隆MXE仓库并切换到兼容分支

因为Ubuntu 16.04比较老,建议用MXE的稳定分支避免兼容性问题(比如mxe-20210101这个版本,亲测在16.04上能正常编译):

git clone https://github.com/mxe/mxe.git
cd mxe
git checkout mxe-20210101

3. 配置并编译MXE(关键步骤)

MXE需要提前编译你程序用到的所有依赖,比如你用了Qt(因为之前用qmake),所以必须编译Qt相关模块。这里同时配置32位和64位的目标架构:

# 编译32位+64位的Qt5基础模块(qtbase是核心,qttools包含qmake等工具)
make MXE_TARGETS='i686-w64-mingw32.static x86_64-w64-mingw32.static' MXE_PLUGIN_DIRS=plugins/qt5 qtbase qttools -j4
  • 解释下参数:
    • MXE_TARGETS指定要编译的目标架构,static后缀表示编译静态链接的库,这样生成的Windows程序不需要带一堆DLL就能运行
    • -j4是根据你的CPU核心数调整,比如4核就写-j4,加速编译(这个过程会比较久,可能要几十分钟,耐心等)
  • 如果你的程序还用到其他依赖(比如OpenCV、Boost),直接在后面加上对应的包名就行,比如qtbase qttools opencv boost

4. 交叉编译你的程序

编译完MXE后,就可以开始交叉编译你的项目了:

编译32位Windows版本

# 把MXE的工具目录加到环境变量里(替换成你实际的MXE路径)
export PATH=/home/your_username/mxe/usr/bin:$PATH

# 进入你的项目目录
cd /path/to/your/cpp_project

# 用MXE提供的32位Qt qmake生成Makefile
i686-w64-mingw32.static-qmake-qt5

# 编译
make -j4

编译64位Windows版本

和32位类似,只是换用64位的qmake:

export PATH=/home/your_username/mxe/usr/bin:$PATH
cd /path/to/your/cpp_project
x86_64-w64-mingw32.static-qmake-qt5
make -j4

常见问题排查

  • 如果编译MXE时遇到某个依赖失败,先检查Ubuntu的依赖是否装全,或者换一个更早的MXE稳定分支
  • 如果你的项目qmake配置文件(.pro)里有Ubuntu特定的设置,比如unix:开头的语句,不用改——MXE的qmake会自动识别目标平台,忽略unix相关的配置
  • 生成的Windows程序会在项目目录里,32位和64位的都是.exe格式,直接拷贝到Windows上就能运行

内容的提问来源于stack exchange,提问作者lung bubble

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:18:14