Wie kompiliere ich ausführbare Dateien für Windows mit GCC mit Linux-Subsystem?

Lesezeit: 3 Minuten

Mikhails Benutzeravatar
Michail

Das Windows 10 Anniversary Update enthält das Linux-Subsystem für Ubuntu. Ich habe gcc mit installiert sudo apt-get install gcc.

Ich habe zu Testzwecken einen einfachen C-Code geschrieben:

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

Und kompiliert es mit gcc -c main.c aber die Ausführung (nur Linux) main.o generiert wird. Wenn ich es laufe ./main.oes zeigt an Hello.

Meine Frage ist, wie kann ich kompilieren main.c damit Windows es ausführen kann? Wie erzeugt man im Grunde eine *.exe Datei mit GCC im Linux-Subsystem?

  • compile Windows exe…sind sie nicht bereits lauffähig?

    – Sourav Ghosh

    5. August 2016 um 9:36 Uhr

  • Ihre Frage ist (zumindest für mich) etwas unklar. Können Sie weitere Informationen bereitstellen, aus denen hervorgeht, warum das, was Sie erhalten, von dem abweicht, was Sie erwartet haben? Beachten Sie auch, dass durch das Übergeben der -c Option an den Compiler, Sie sagen ihm ausdrücklich, nur den Kompilierungsschritt auszuführen – und zu nicht eine ausführbare Datei durch Linken erzeugen.

    – GR

    5. August 2016 um 9:52 Uhr

  • @GM Wenn ich die bekommen will * .exe Datei soll ich einfach so machen gcc -o main.exe main.c ? Tatsache ist, dass, wenn ich es tue und versuche, diese Ausgabedatei auszuführen main.exe Ich schaff das i.imgur.com/NUDCslM.jpg

    – Michail

    5. August 2016 um 9:56 Uhr

  • Haben Sie versucht, es innerhalb oder außerhalb des Linux-Subsystems auszuführen?

    – Markus Laire

    5. August 2016 um 9:57 Uhr

  • Da dies anscheinend ein vollständiges Linux-System ist, benötigen Sie einen Cross-Compiler, um unter Linux ausführbare Windows-Dateien zu kompilieren.

    – Markus Laire

    5. August 2016 um 10:02 Uhr

Das Linux-Subsystem arbeitet als Linux-Computer. Sie können nur ausführbare Linux-Dateien darin und standardmäßig ausführen gcc erstellt ausführbare Linux-Dateien.

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

sudo apt-get install mingw-w64

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

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

Und 64-Bit-Windows ausführbar mit:

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

Beachten Sie, dass diese ausführbaren Windows-Dateien nicht innerhalb des Linux-Subsystems funktionieren, sondern nur außerhalb.

  • Die Manpage für gcc scheint zu implizieren, dass es einige Optionen zum Erstellen von Windows-Konsolen- und Fenster-Exes gibt. Gibt es einen Grund, warum sie nicht funktionieren würden? -mconsole -mwindows

    – sam msft

    12. Juli 2017 um 0:31 Uhr


  • Ich habe nicht viel Erfahrung mit dem Erstellen von Windows-Apps, daher kenne ich die Details dieser Compileroptionen nicht. Dennoch funktionieren diese Windows-spezifischen Optionen nur mit *-mingw32-gcc-Compilern und nicht mit Standard-gcc, das ausführbare Linux-Dateien erstellt.

    – Markus Laire

    12. Juli 2017 um 9:52 Uhr

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

    – sam msft

    14. Juli 2017 um 0:40 Uhr

  • Es scheint zu funktionieren, aber wie kann die Datei in .exe kompiliert werden, wenn die .c eine .txt-Datei als Parameter benötigt

    – Benutzer12346352

    6. Januar 2019 um 14:36 ​​Uhr

  • Ich bezweifle, dass dies genau richtig ist. Es heißt, Sie “müssen” mingw verwenden. Das ist sicher nur eine Option. GCC soll bekanntermaßen in der Lage sein, zwischen allem zu kompilieren, also kann es sicher auch x86-PE auf einem x86-ELF-System kreuzkompilieren? Ich weiß nicht, wie es geht, aber es scheint schockierend, wenn es unmöglich ist.

    – Hippiepfad

    23. November 2019 um 18:57 Uhr

Wenn Sie mit gcc unter Linux kompilieren, wird eine ELF-Datei erstellt, keine PE-Datei (was Windows versteht).

Um ein Programm für Windows innerhalb von Linux zu kompilieren, können Sie mingw verwenden.

  • So verwenden Sie mingw, um eine cpp-Datei in eine exe-Datei zu kompilieren

    Benutzer15375057

    3. September um 17:53

1417190cookie-checkWie kompiliere ich ausführbare Dateien für Windows mit GCC mit Linux-Subsystem?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy