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
相关产品推荐
相关产品推荐

