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

wxWidgets

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://doc.ubuntu-fr.org/wxwidgets
http://www.framasoft.net/article1633.html
http://www.wxwidgets.org/
http://articles.mongueurs.net/magazines/linuxmag70.html

6 réflexions au sujet de « wxWidgets ou l’art de programmer en C++ multiplateforme sous ubuntu »

  1. Merci pour ces quelques informations sur wxWidget que moi aussi je n’avais jusqu’ici entendu que de nom. Ca me semble bien joli et bien sympathique tout ça. Une question néanmoins. Perso les seules fois ou j’ai programmé en c++ avec une interface graphique j’ai utilisé glade pour générer mon interface graphique à l’aide de son excellent langage XML qui rend la programmation nettement plus lisible.

    Est-ce que tu sais si ça fonctionne aussi comme ça pour wxWidget?

  2. Et bien… tu te lances dans le développement sous GNU/Linux maintenant 🙂

    C’est pas mal WxWidget, cela permet en effet un développement C++ multiplateforme sans trop d’effort. J’avais d’ailleurs fait un wrapper pour encapsuler les accès aux bases de données sans utiliser l’ODBC. J’avais écrit les classes abstraites et une implémentation pour SQLite… puis c’est pas allé plus loin :-S
    https://gna.org/projects/wxdbwrappe

  3. @theClimber: salut, alors je commence juste avec wxwidgets donc je ne peux te donner que quelques informations, et Glade je connais pas, désolé, donc pour comparer ça va être dur. cependant avec wxwidgets, tu utilises un set d’api unique fournie par les bibliothèques : forcement limité à un moment, en évitant les appels systèmes directs dépendant de l’os, c’est à dire coder « propre » dans l’esprit multiplateforme (sinon c’est possible mais plus trés portable et ça casse l’intérêt) et ainsi de code en interfaces natives.
    Ensuite, pour ce qui est du XML, il y a la libxml2 utilisée pour « parser » tes fichiers, mais je ne pense pas que c’est ton objectif.
    Ce qui se rapprocherait le plus serait wxGlade/wxPython qui permet d’utiliser wxwidgets. Tu peux construire une interface en wxWidgets avec le logiciel wxGlade, qui peut générer du python, mais aussi du C++, du perl, à l’aide de fichier XML permettant de ne pas décrire ton interface graphique en la codant mais via le code XML dans un fichier séparé.
    J’en sais pas plus mais ça se fait il semble 😉
    http://forum.ubuntu-fr.org/viewtopi

  4. @jp.fox: salut JP, ben oui, marre de développer toujours avec la même d…. 🙂 . C’est clair que l’on arrive facilement et rapidement à faire de petites applis avec la quantité de bibliothèques et de classes déjà existantes, ça me rappel le java ou le python niveau rapidité. Aprés, je sent que ça peu rapidement prendre des allures d’usine à gaz, comme les autres languages d’ailleurs. Donc, on va voir, j’en suis qu’au début 😎

  5. Bonsoir,
    il faut passer à Qt, bien plus puissant et simple. j’ai utilisé wxWidgets et y a pas photo entre les deux, même si wxWidgets est très bien aussi.
    A+

    PS avec QtCreator

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *