Mikhail Mikhail - 4 months ago 16
C Question

How to compile executable for Windows with GCC with Linux Subsystem?

Windows 10 Anniversary Update includes the Linux Subsystem for Ubuntu. I installed gcc with

sudo apt-get install gcc
.

I wrote some simple C code for testing purposes:

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


And compiled it with
gcc -c main.c
but the execute (Linux only)
main.o
is generated. If I run it
./main.o
, it displays
Hello
.

My question is, how can I compile
main.c
so that Windows can run it? Basically, how do you generate a
*.exe
file with GCC in Linux Subsystem ?

Answer

Linux Subsystem works as a Linux-computer. You can only run Linux executables inside it and default gcc creates Linux executables.

To create Windows executables, you need to install mingw cross-compiler:

sudo apt-get install mingw-w64

Then you can create 32-bit Windows executable with:

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

And 64-bit Windows executable with:

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

Note that these Windows executables will not work inside Linux Subsystem, only outside of it.