Bonjour,
Je vais te donner dans un premier temps un petit aperçu de ce qui se passe quand tu compiles avec un outil comme gcc.
On part du code source le fameux .c, dans un premier temps on le donne au préprocesseur C qui ne va se préoccuper que des lignes qui commencent par un # (les #include , les #define, les #if, ...). Il va créer un nouveau fichier qui va être envoyé au compilateur qui va faire le gros du boulot : analyse syntaxique, sémantique, optimisation, etc. Le compilateur va créer un code assembleur qui sera transmit à l'assembleur qui lui va créer un fichier objet. Finalement, si tu crées un exécutable, l'éditeur des liens va lier tous les fichiers objets, chercher les références dans les bibliothèques (dont une très importante la lib C) pour le créer.
GCC appelle les bons outils au bon moment de manière transparente pour toi. Il existe par exemple les outils cpp qui est le préprocesseur(preprocessor), as qui est l'assembleur(assembler), ld l'éditeur des liens (linker), mais d'autres encore. Ensemble ils forment la chaîne de compilation (toolchain en anglais).
Une image pour résumer tout ça, en espérant ne pas avoir été trop long :
Venons-en à la compilation croisée (cross compiling). Il s'agit d'une chaîne de compilation qui s'exécute dans un environnement hôte (host, Linux pour toi) et qui crée des fichiers adaptés à un autre environnement cible (target, Windows pour toi). Il te faudra disposer non seulement des outils de la chaîne de compilation, mais également des fichiers d'entête de la plateforme cible ainsi que «de ce qu'il va falloir à l'éditeur de liens». Sur le schéma précédent, en vert tu as ce qui est indépendant de la plateforme (tes sources), en bleu ce qui est crée au format cible et en rouge ce que tu dois déjà posséder pour que cela fonctionne.
Une chaîne pour faire de la compilation croisée de Linux vers Windows est par exemple MingW. Il faut commencer par l'installer sur ta distribution. Ensuite il te faut des versions cibles des bibliothèques que ton projet utilise, par exemple pour la SDL vérifie que ta distribution les fournit, si ce n'est pas les cas tu peux soit les recompiler ou voir si ce que ce projet sourceforge propose te convient.
Il va également falloir modifier le makefile pour la compilation croisée. En compilant «normalement» tu utilises la commande gcc. Il y aura 2 «gcc» pour la compilation croisée, le premier qui est prévue pour windows 32bit i686-w64-mingw32-gcc et celui pour windows 64bit x86_64-w64-mingw32-gcc.
Si dans ton makefile tu as quelque chose comme :
pour la compilation croisée tu auras
CC = x86_64-w64-mingw32-gcc
Ensuite, il y a toujours beaucoup de détails qui font déraper, mais rien d'insurmontable.
Partager