2016-08-05 48 views
18

Windows 10 Anniversary Update enthält das Linux Subsystem für Ubuntu. Ich habe gcc mit sudo apt-get install gcc installiert.Wie kompiliere ich eine ausführbare Datei für Windows mit GCC mit Linux Subsystem?

Ich schrieb ein paar einfache C-Code für Testzwecke:

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

Und es mit gcc -c main.c kompiliert aber die execute (nur Linux) main.o erzeugt wird. Wenn ich es ./main.o starte, zeigt es Hello an.

Meine Frage ist, wie kann ich kompilieren main.c, damit Windows es ausführen kann? Im Grunde, wie generieren Sie eine *.exe Datei mit GCC in Linux Subsystem?

+1

'compile Windows exe' ... sind sie nicht bereits ausführbar? –

+2

Ihre Frage ist (zumindest für mich) etwas unklar. Können Sie mehr Informationen darüber liefern, warum das, was Sie bekommen, sich von dem unterscheidet, was Sie erwartet haben? Beachten Sie auch, dass Sie dem Compiler die Option "-c" übergeben und ihn explizit anweisen, nur den Kompilierungsschritt auszuführen - und nicht, indem Sie eine Verknüpfung erstellen. –

+0

@ G.M. Wenn ich die '* .exe' Datei bekommen will, sollte ich einfach' gcc -o main.exe main.c' machen? Tatsache ist, dass, wenn ich es tue und versuche, diese Ausgabedatei 'main.exe' zu ​​starten, habe ich diese http://i.imgur.com/NUDCslM.jpg – Mikhail

Antwort

34

Linux-Subsystem funktioniert als Linux-Computer. Sie können nur ausführbare Linux-Dateien darin ausführen und der Standard gcc erstellt ausführbare Linux-Dateien.

Um ausführbare Windows-Dateien zu erstellen, geben Sie mingw Cross-Compiler installieren müssen:

sudo apt-get install mingw-w64 

Dann können Sie erstellen 32-Bit-Windows ausführbare Datei mit:

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

und 64-Bit-Windows ausführbare Datei mit :

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

Beachten Sie, dass diese Windows-Programme in Linux-Subsyste nicht funktionieren m, nur außerhalb davon.

+0

Die man-Seite für gcc scheint zu implizieren, dass es einige Optionen gibt, Windows-Konsole und gefensterte Exes zu machen.Gibt es einen Grund, warum sie nicht arbeiten würden? -mconsole -mwindows –

+0

Ich habe nicht viel Erfahrung mit dem Erstellen von Windows-Anwendungen, so dass ich die Details dieser Compiler-Optionen nicht kenne. Dennoch funktionieren diese Windows-spezifischen Optionen nur mit * -micww32-gcc-Compilern und nicht mit dem Standardgcc, der ausführbare Linux-Dateien erzeugt. –

+0

Es scheint, als ob x86_64-w64-mingw32-gcc geändert wurde, so dass es die Windows C Runtime (MSVCRT.DLL) und andere Kern-Windows-Bibliotheken anstelle der Standard-C-libs-gcc-Links verwendet (vermutlich was auch immer in/lib?). –

4

Wenn Sie mit gcc unter Linux kompilieren wird es eine ELF-Datei kein PE produzieren (was Fenster verstehen) Datei

Um ein Programm für Fenster innerhalb Linux kompilieren Sie mingw verwenden können.