Wie kompiliere ich ausführbare Dateien für Windows mit GCC mit Linux-Subsystem?
Lesezeit: 3 Minuten
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
14171900cookie-checkWie kompiliere ich ausführbare Dateien für Windows mit GCC mit Linux-Subsystem?yes
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 machengcc -o main.exe main.c
? Tatsache ist, dass, wenn ich es tue und versuche, diese Ausgabedatei auszuführenmain.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