【问题标题】:How to compile executable for Windows with GCC with Linux Subsystem?如何使用带有 Linux 子系统的 GCC 为 Windows 编译可执行文件?
【发布时间】:2016-12-11 16:17:59
【问题描述】:

Windows 10 周年更新包括适用于 Ubuntu 的 Linux 子系统。我用sudo apt-get install gcc安装了gcc。

我写了一些简单的 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 文件?

【问题讨论】:

  • compile Windows exe...它们不是已经可以执行了吗?
  • 你的问题(至少对我来说)有点不清楚。您能否提供更多信息,说明您获得的结果与预期不同的原因。另请注意,通过将-c 选项传递给编译器,您明确告诉它只执行编译步骤——并且通过链接生成可执行文件。
  • @G.M.如果我想获得 * .exe 文件,我应该只做 gcc -o main.exe main.c 吗?事实是,当我这样做并尝试运行此输出文件main.exe 时,我得到了此i.imgur.com/NUDCslM.jpg
  • 你尝试在 Linux 子系统内部还是外部运行它?
  • 由于这似乎是完全的 linux 系统,你需要一个交叉编译器来编译 linux 中的 windows 可执行文件。

标签: c bash gcc


【解决方案1】:

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 子系统内部运行,只能在其外部运行。

【讨论】:

  • gcc 的手册页似乎暗示有一些用于制作 Windows 控制台和窗口 exe 的选项。他们有什么理由不工作吗? -mconsole -mwindows
  • 我没有太多创建 Windows 应用程序的经验,所以我不知道那些编译器选项的详细信息。那些特定于 Windows 的选项仍然只适用于 *-mingw32-gcc 编译器,而不适用于创建 Linux 可执行文件的默认 gcc。
  • 似乎 x86_64-w64-mingw32-gcc 已更改,使其旨在使用 Windows C 运行时 (MSVCRT.DLL) 和其他核心 Windows 库,而不是标准 C 库 gcc 链接(大概是 /lib 中的什么?)。
  • 它似乎可以工作,但是如果 .c 需要一个 .txt 文件作为参数,如何将文件编译为 .exe
  • 我怀疑这完全正确。它说你“需要”使用mingw。当然,这只是一种选择。众所周知,GCC 应该能够在任何东西之间进行交叉编译,所以它肯定也可以在 x86-ELF 系统上交叉编译 x86-PE?我不知道该怎么做,但如果不可能的话,这似乎令人震惊。
【解决方案2】:

如果你在 linux 上使用 gcc 编译,它会生成一个 ELF 文件而不是 PE(windows 理解的)文件

要在 linux 中为 windows 编译程序,你可以使用 mingw。

【讨论】:

    猜你喜欢
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 2020-09-24
    • 1970-01-01
    相关资源
    最近更新 更多