Compilation croisée

Pour ses projets de développement informatique cross-platform, EIF-services a choisi la solution wxWidgets, avec l'environnement de programmation (IDE) Code::Blocks et notamment son plugin wxSmith. Il importe toutefois de vérifier qu'une application se comporte bien de façon identique sur les plates-formes ciblées.

Pour ce genre de test, une première solution consiste à recompiler nativement l'application développée sur une autre plate-forme; nous y reviendrons d'ailleurs à la fin de l'article. Une autre solution, qui ne nécessite pas de sortir de l'environnement de programmation de la plate-forme de développement, consiste à effectuer une compilation croisée vers la cible directement sur le système hôte. Nous considérons ici le cas d'un hôte sous Linux et d'une cible sous Windows. Le but de cet article est donc de valider un workflow de compilation croisée Linux→Windows, en se basant sur les indications du wiki de Code::Blocks. Nous avons cependant adapté les consignes fournies à cet endroit et en attendant de pouvoir mettre à jour le wiki (dont l'accès n'est pas libre), vous trouverez dans ce PDF les détails1 de la procédure, dont les principales étapes consistent à:

  1. installer le compilateur croisé MinGW (distribué par Ubuntu);
  2. compiler croisé wxWidgets;
  3. configurer l'environnement Code::Blocks;
  4. configurer le projet Code::Blocks.

Prenons comme exemple le tutoriel wxSmith #8. Compilé (localement) et exécuté sous Linux, cela donne:

Linux release

Les copies d'écran suivantes illustrent le résultat de la compilation croisée (MinGW), avec exécution sous Linux via Wine. Comme il se doit, les fichiers JPG et PNG créés par l'exécutable Windows sont bien lisibles sous Linux:

Windows releaseoutput of Windows release read on Linux

Enfin, le même exécutable (lancé avec Wine ci-dessus) tourne bien aussi sous Windows (en l'occurence un Windows XP installé sous VirtualBox). Notez que le look and feel s'adapte automatiquement à l'environnement:

Windows release on Windows XP

Comme mentionné au début de l'article, une autre solution pour vérifier la compatibilité cross-platform d'un développement consiste à recompiler nativement le projet. S'agissant de Code::Blocks, le wiki de wxWidgets contient une procédure de configuration utilisant la version précompilée de wxWidgets; nous avons aussi résumé les réglages à effectuer dans cette animation GIF. Avec l'exemple minimal de wxWidgets, cela donne:

Windows compilation

Histoire de boucler la boucle et juste par curiosité (cela n'a pas d'intérêt pratique), nous avons aussi testé l'exécution Linux (Wine) du binaire généré sous Windows:

Windows exec run on Linux


  1. Le PDF a été généré à partir d'un document markdown grâce à pandoc, plus précisément un wrapper que vous trouverez entre autres choses ici.