Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
tutoriel:comment_utiliser_mingw32_pour_faire_des_executables_windows [Le 18/04/2009, 02:50] 213.95.41.13tutoriel:comment_utiliser_mingw32_pour_faire_des_executables_windows [Le 10/02/2021, 18:24] (Version actuelle) – [Conclusion] oublie de "par " et de "et", merci pour la page 91.175.210.88
Ligne 1: Ligne 1:
 +{{tag>tutoriel programmation compilation gcc}}
  
 +----
 +
 +====== 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 
 +[[tutoriel:console_ligne_de_commande|vous déplacer dans l'arborescence en ligne de commande]].
 +
 +Nous allons uniquement utiliser du C ici, pour du C++ remplacer **gcc** par **g++**.
 +
 +Plan du tutoriel :
 +  * Code en C à avoir pour la compilation
 +  * Installation de MingW64
 +  * Compilation
 +  * Exécution du programme créé
 +  * Supplément : faire un make file pour faciliter la commande de build
 +
 +===== Code à avoir sous la main =====
 +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")
 +<code c>
 +#include <stdio.h>
 +
 +int main ()
 +  {
 +    printf("Bonjour linuxien !\n");
 +    return 0;
 +  }
 +</code>
 +
 +Vous pouvez compiler le code suivant pour vérifier le fonctionnement des appels windows :
 +
 +<code c>
 +#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;
 +}
 +</code>
 +
 +===== Installer le compilateur =====
 +==== Installer MingW32 ====
 +Pour compiler en 32 bits, installer la version 64 bits ci-dessous et remplacer tous les « x86_64-w64-mingw32-gcc » par « i686-w64-mingw32-gcc ».
 +==== Installer Mingw64 ====
 +installer **[[apt>gcc-mingw-w64]]**.
 +
 +En ligne de commande cela donne :
 +  sudo apt install gcc-mingw-w64
 +
 +===== Compilez ! =====
 +==== Compiler en ligne de commande ====
 +  x86_64-w64-mingw32-gcc -o bonjour.exe main.c
 +
 +<note>Le nom de l'exécutable est **bonjour.exe** arbitrairement pour distinguer les exécutables Linux des exécutables Windows 
 +mais ce n'est absolument pas obligatoire sur Linux</note>
 +
 +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 :-) , [[:make|doc de make]]. 
 +
 +Créons maintenant un fichier //makefile// dans le même dossier que « main.c »:
 +<code makefile>
 +# Makefile : build exécutable Windows
 +w-exe: main.c
 + x86_64-w64-mingw32-gcc -o main.exe main.c
 +</code>
 +
 +**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
 +
 +===== Exécuter le programme =====
 +Utilisez [[:wine]], un [[:virtualisation|émulateur avec Windows]] ou Windows lui-même.
 +  wine main.exe
 +
 +===== Problème connus ====
 +on accueil vos erreurs sur [[https://forum.ubuntu-fr.org/|le forum]] et nous mettrons les solutions ici
 +
 +===== Conclusion =====
 +Vous pouvez maintenant créer des exécutables Windows depuis Linux : il vous suffit simplement de remplacer lors de vos compilations « gcc » par « x86_64-w64-mingw32-gcc » et « g++ » par « x86_64-w64-mingw32-g++ ».
 +
 +N'oubliez pas cependant que 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. 
 +
 +===== Références ======
 +
 +  * [en] Site officiel : <del>[[http://www.mingw.org/|Home of the MinGW, MSYS and mingwPORT]]</del> (ne donne rien ce 23 janvier 2021)
 +  * [en] Site officiel : [[http://mingw-w64.org/doku.php| Accueil de MingW64]]
 +  * [fr] Source : [[http://tfc.duke.free.fr/coding/gcc-fr.html|Une introduction à GCC et MinGW]] (4 juin 2006)
 +
 +----
 +
 +//Contributeurs : [[utilisateurs:hind_flo]], [[utilisateurs:Ner0lph]], [[:utilisateurs:amiralgaby]] (éditions mineures), [[:utilisateurs:DarkShade]]//