Ceci est une ancienne révision du document !



Comment utiliser MingW[32|64] pour faire des exécutables Windows ?

Il peut arriver que pour certaines raisons l'on souhaite créer des exécutables pour Windows depuis Linux. Il existe une solution : MingW. MingW s'utilise avec GCC ou G++. MingW est le portage sous Windows de GCC.

Pour suivre ce tutoriel vous devez savoir vous déplacer dans l'arborescence en ligne de commande.

Plan du tutoriel :

  • Code en C à avoir pour la compilation
  • Installation de MingW32 ou MingW64
  • Compilation
  • Exécution du programme créé
  • Supplément : faire un make file pour facilité la commande de build
  • Solutions aux erreurs de compilation

Nous allons utiliser uniquement du C ici, pour du C++ remplacer gcc par g++.

La première des choses est d'avoir un code, ici en C, compilable. Si vous n'en avez pas voici un code à copier-coller dans un fichier (de préférence "main.c")

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

Vous pouvez compiler le code suivant pour vérifier le fonctionnement des appels windows :

#include <windows.h>
 
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
  MessageBoxW(NULL,
    L"Cette fenêtre prouve que le cross-compilateur est fonctionnel !",
    L"Hello World", MB_OK);
  return 0;
}

Installer MingW32

Je n'ai pas l'impression qu'il est possible d'installer mingw-w32

Installer Mingw64

installer gcc-mingw-w64.

En ligne de commande cela donne :

sudo apt install gcc-mingw-w64

Compiler en ligne de commande

gcc-mingw-w64 -o bonjour.exe main.c
bonjour a été remplacé par bonjour.exe arbitrairement pour distinguer l'exécutable Linux de l'exécutable Windows mais ce n'est absolument pas obligatoire

TADA ! un bel exécutable fut créé dans le dossier courant, faites

file bonjour.exe # permet de voir le type de fichier

C'est bel est bien un exécutable Windows s'il possède Windows dans sa description.

Vous venez de créer un exécutable pour Windows.

Le « makefile »

Ça simplifie grandement la vie pour quelqu'un souhaitant simplement build à partir des sources :-) , doc de make.

Créons maintenant un fichier makefile dans le même dossier que « main.c »:

# Makefile : build exécutable Windows
w-exe: main.c
	gcc-mingw-w64 -o main.exe main.c

Note : Il y a une tabulation et pas une suite d'espaces devant « gcc-mingw-w64 » sur la 3ème ligne de l'exemple. Cette tabulation est obligatoire. Attention aux logiciels de traitement de texte qui remplacent, par défaut, les tabulations par des espaces.

Pour l'exécuter tapez (une fois placé dans le bon répertoire) :

make

Utilisez wine ou un émulateur avec Windows ou Windows lui-même.

wine main.exe

FIXME on accueil vos erreurs sur le forum et nous mettrons les solutions ici

Vous pouvez maintenant créer des exécutables Windows depuis Linux : il vous suffit juste de remplacer lors de vos compilations « gcc » « gcc-mingw-w64 », « g++ » par « g++-mingw-w64 ».

N'oubliez pas que cependant les programmes seront bien plus gros en taille que ceux produits pour Linux ou par Microsoft Visual Studio. Ceci est dû au fait que la bibliothèque standard doit être liée statiquement avec l'exécutable.


Contributeurs : hind_flo, Ner0lph, amiralgaby (éditions mineures), DarkShade

  • tutoriel/comment_utiliser_mingw32_pour_faire_des_executables_windows.1610995864.txt.gz
  • Dernière modification: Le 18/01/2021, 19:51
  • par amiralgaby