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 ?
Solution 1:
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.
Solution 2:
If you compile using gcc on linux it will produce an ELF file not a PE (what windows understand) file
To compile a program for windows inside linux you can use mingw.