wxWidgets ou l'art de programmer en C++ multiplateforme sous ubuntu

Publié le 23 juillet 2008 par Standart

C'est dans le cadre de ma participation à un projet open-source, dont je vous donnerai plus d'informations prochainement, que j'ai dû faire connaissance avec wxWidgets dont je ne connaissais que le nom. C'est donc l'occasion de vous partager mon premier contact avec cette 'bibliothèque' de programmation sous licence LGPL.

Les présentations

Pour la présenter, cette bibliothèque wxWidgets fournie un grand nombres d'API (Application Program Interface), utilisées pour le développement d'applications supportant des interfaces Homme-Machine multi plates-formes comme Linux, Windows ou Mac.
Cette bibliothèque n'est pas nouvelle, elle a déjà bien 10 ans d'existence et a considérablement évoluée depuis, d'ailleurs elle s'appelait auparavant wxWindows, mais sous la pression de microsoft à cause du "windows" dedans, fut rebaptisée wxWidgets.

Mais pour m'intéresser à cette bibliothèque, il m'a fallu comprendre et connaitre les avantages à tirer d'une telle librairie comparée à d'autres, comme Qt, Gtk ou java :

Premièrement, cette bibliothèque utilise elle-même les bibliothèques natives des plates-formes cibles sur laquelle elle est installée, garantissant ainsi le look et l'homogénéité du système sur lequel l'application développée avec wxWidgets est installée. Ainsi, le programmeur écrit une seule version de son code et peut normalement le compiler sous toutes les autres plateformes Linux, Windows ou Mac supportées par wxWidgets, via un compilateur C++, et son application fonctionnera de la même façon sur chacune des plate-formes, avec la même apparence mais avec le thème graphique de l'OS cible.

Deuxièmement, ce n'est pas un langage interprété et cela garantie une certaine rapidité à l'exécution : en effet, à la compilation, les fonctions de la librairie wxwidgets utilisées par l'application ont été traduites en fonctions optimisées de l'OS, elles ne sont pas "traduites" à l'exécution comme des langages tel python. En plus, cette librairie est écrite en C++ et très orientée programmation objet et le fait de devoir compiler l'application avec de très nombreuses API et d'avoir ainsi la possibilité de rester un peu plus prêt du matériel de la machine que l'on utilise, ne désoriente pas le développeur C embarquée que je suis .

Bon, il n'y a pas que des avantages à cela évidement, le poids du logiciel compilé s'en ressent (car nécessite les librairies d'abstractions wxWidgets dédiées à l'OS machine lors de l'exécution du programme) et le langage objet peut paraître lourd et contraignant pour certains.

Enfin, la licence est sous GNU Lesser General Public License (LGPL), une variante de la GPL permettant à des logiciels non GPL d'être compilés avec du code libre... je ne m'étendrais pas plus sur la licence, c'est surtout la communauté wxWidgets qui est très nombreuse et très active : en gros, on trouve aujourd'hui tout ce dont on a besoin pour développer ses applications wxWidgets facilement et rapidement, au travers du site wxWidgets, des tutoriels, des exemples ou des nombreux forums.

Au final, pourquoi ce choix de wxWidgets ? de toute façon je n'avais pas le choix étant donné que le programme sur lequel je dois m'attaquer est déjà développé en wxWidgets, donc autant y aller en voyant les bons côtés, les mauvais s'inviteront d'eux-même .

Installation et utilisation

Je vais détailler ici l'utilisation de wxWidgets sous ubuntu Hardy Heron 8.04.
Bon, déjà n'espérer pas juste à devoir installer un .deb (ou un setup.exe sous windows) et pouvoir ainsi compiler votre premier programme 'Hello world' en un clic. Mais ce n'est pas non plus trés compliqué.

Il faut savoir avant toute chose que la bibliothèque wxWidgets va devoir être compilée pour créer justement "la" bibliothèque adaptée à votre OS car je rappel que l'avantage est avant tout d'être multi-platforme. Avant la compilation du package, j'ai installé au préalable plusieurs autres paquets via les dépôts officiels de synaptics, entre autres :

  • libgtk2.0-dev
  • libgtk2.0-0
  • libwxgtk2.8-dev
  • libwxgtk2.8-dbg
  • libwxgtk2.8-0
  • wx2.8-headers
  • libwxbase2.8-dev
  • libwxbase2.8-dbg
  • libwxbase2.8-0

sont les plus importantes, et je ne sais pas si elles sont vraiment toutes nécessaires, en tout cas je peux compiler sans difficulté sur ma Hardy.

Je vous laisse le soin de suivre le tuto ubuntu fait pour l'installation et la compilation du package wxWidgets, les commandes sont reprises ci-dessous mais je vous conseil de télécharger la dernière version stable 2.8.8 via un terminal sous votre compte utilisateur:

 cd
wget http://switch.dl.sourceforge.net/sourceforge/wxwindows/wxGTK-2.8.8.tar.gz

"Détarez" le fichier et rendez-vous sous votre répertoire d'installation qui devrait se nommer /wxGTK-2.8.8

 cd wxGTK-2.8.8

Et les commandes suivantes :

 ./configure
make
sudo make install

Et si tout c'est bien passé, le final :

 sudo ldconfig

Voilà, vous devriez à présent être capable de compiler les samples (exemples) disponibles avec la librairies, pour tous les compiler d'un coup, faire:

 cd samples
make

pour exécuter un sample, aller dans son répertoire, comme par exemple "menu":

 cd menu
./menu

Et voilà, vous avez compilé et exécuté votre première application wxwidgets, elle est pas belle la vie

ressources:
http://www.unixgarden.com/index.php/...
http://www.framasoft.net/article1633.html
http://www.wxwidgets.org/
http://articles.mongueurs.net/magazines/linuxmag70.html