You need to enable JavaScript to run this app. Ubuntu交叉编译C到Windows报错无法识别-mwindows选项如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu交叉编译C到Windows报错无法识别-mwindows选项如何解决

问题原因

你当前使用的是Ubuntu原生面向Linux编译目标的gcc/g++工具链,-mwindows是MinGW交叉编译工具链的专属参数,用于生成Windows平台无控制台窗口的GUI程序,原生gcc不识别该参数,因此报错。

解决方法

Ubuntu官方软件源已经提供预编译的MinGW交叉编译工具链,无需自行编译即可直接安装使用,步骤如下:

1. 安装交叉编译工具链

执行以下命令安装MinGW-W64工具链,同时支持32位、64位Windows目标编译:
sudo apt update && sudo apt install mingw-w64

2. 修改Makefile配置

将原Makefile中的编译器变量CC替换为对应目标平台的交叉编译器前缀,同时将输出文件后缀修改为Windows可执行文件的.exe后缀,示例如下(以编译64位Windows程序为例):

# 64位Windows目标C语言交叉编译器,若需编译32位程序替换为 i686-w64-mingw32-gcc
# 若代码包含C++语法,对应将gcc后缀替换为g++即可
CC = x86_64-w64-mingw32-gcc
IDIR = -Iinclude
SRC = src
CFLAGS = -Wall -Wextra
# 仅生成无控制台的GUI程序时保留-mwindows参数,普通命令行程序可删除该参数
LFLAGS = -mwindows

main.exe: main.o
	$(CC) $(CFLAGS) $(IDIR) $(LFLAGS) $^ -o $@ 

main.o: $(SRC)/main.c
	$(CC) $(CFLAGS) $(IDIR) -c -o $@ $^ 

3. 编译验证

重新执行make -f windows.mk即可生成对应Windows平台的可执行exe文件。

补充说明
  • 普通命令行Hello World程序无需保留-mwindows参数,删除后运行exe会自动弹出控制台窗口打印输出内容。
  • 编译生成的exe可直接通过Wine在Ubuntu上测试运行,也可拷贝至Windows系统直接执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 23:54:05