web-dev-qa-db-fra.com

Comment compiler un exécutable pour Windows avec GCC avec un sous-système Linux?

La mise à jour anniversaire de Windows 10 inclut le sous-système Linux pour Ubuntu. J'ai installé gcc avec Sudo apt-get install gcc.

J'ai écrit du code C simple à des fins de test:

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

Et compilé avec gcc -c main.c mais l'exécutable (Linux uniquement) main.o est généré. Si je le lance ./main.o, il affiche Hello.

Ma question est, comment puis-je compiler main.c pour que Windows puisse l'exécuter? Fondamentalement, comment générez-vous un *.exe Fichier avec GCC dans le sous-système Linux?

35
Mikhail

Le sous-système Linux fonctionne comme un ordinateur Linux. Vous ne pouvez y exécuter que des exécutables Linux. Par défaut, gcc crée des exécutables Linux.

Pour créer des exécutables Windows, vous devez installer le compilateur croisé mingw:

Sudo apt-get install mingw-w64

Ensuite, vous pouvez créer un exécutable Windows 32 bits avec:

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

Et un exécutable Windows 64 bits avec:

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

Notez que ces exécutables Windows ne fonctionneront pas dans le sous-système Linux, mais uniquement en dehors de celui-ci.

59
Markus Laire

Si vous compilez en utilisant gcc sur linux, il produira un fichier ELF et non un fichier PE (ce que Windows comprend)

Pour compiler un programme pour Windows dans Linux, vous pouvez utiliser mingw.

6
david