如何用 Linux 子系统编译 Windows 的 GCC 可执行文件?

Windows10周年更新包括 Ubuntu 的 Linux 子系统。

我为了测试目的编写了一些简单的 C 代码:

#include <stdio.h>
int main(void){
printf("Hello\n");
return 0;
}

然后用 gcc -c main.c编译它,但是执行(仅 Linux) main.o是生成的。如果我运行它 ./main.o,它显示 Hello

我的问题是,如何编译 main.c以便 Windows 能够运行它?基本上,如何在 Linux 子系统中使用 GCC 生成 *.exe文件?

119714 次浏览

如果您在 linux 上使用 gcc 编译,它将生成一个 ELF 文件,而不是 PE 文件

要编译 Linux 内部窗口的程序,可以使用 mingw。

Linux 子系统作为一台 Linux 计算机工作。您只能在其中运行 Linux 可执行文件,默认 gcc创建 Linux 可执行文件。

要创建 Windows 可执行文件,需要安装 mingw 交叉编译器:

sudo apt-get install mingw-w64

然后,您可以使用以下命令创建32位 Windows 可执行文件:

i686-w64-mingw32-gcc -o main32.exe main.c

和64位 Windows 可执行文件:

x86_64-w64-mingw32-gcc -o main64.exe main.c

请注意,这些 Windows 可执行文件不能在 Linux 子系统内部工作,只能在 Linux 子系统外部工作。