Programmation GTK/Compilation de Bonjour tout le monde


Compilation "à la main"

modifier

Supposons que vous avez sauvegardé le code précédent dans un fichier nommé bonjour.c, pour le compiler tapez la commande suivante :

$ gcc -Wall -g bonjour.c -o bonjour_monde -L/usr/X11R6/lib \
-lgtk -lgdk -lglib -lXext -lX11 -lm

Les bibliothèques invoquées ci-dessus doivent toutes être dans vos chemins de recherche par défaut, sinon, ajoutez -L<library directory> pour que gcc recherche dans ces répertoires les bibliothèques nécessaires. Sur certains systèmes (comme Debian ou Red Hat), on doit ajouter -L/usr/X11R6/lib pour qu'il trouve les bibliothèques X11. De manière générale, il est préférable de retrouver les chemins de ces librairies grâce à l'utilitaire pkg-config. Par exemple, pour gtk+, sur un certain système :

$ pkg-config --cflags --libs gtk+
-I/usr/include/gtk-1.2 [...] -L/usr/X11R6/lib -lgtk -lgdk -lXext -lX11 -lm -lglib

Cela affiche les options nécessaires au compilateur pour qu'il trouve la librairie gtk+ ainsi que toutes celles dont gtk+ dépend (comme X11). Étant donné que ces chemins peuvent différer d'un système à un autre, pkg-config rend notre application plus portable. On peut alors compiler notre programme en une commande :

gcc bonjour.c -o bonjour_monde `pkg-config --cflags --libs gtk+`

Attention pour GTK-2.0 la commande est légèrement différente :

gcc bonjour.c -o bonjour_monde `pkg-config --cflags --libs gtk+-2.0`

L'ordre des bibliothèques est important. L'éditeur de liens doit connaître les fonctions d'une bibliothèque dont il a besoin avant de les traiter.

Si vous compilez en utilisant des bibliothèques statiques, l'ordre dans lequel vous listez les bibliothèques devient très important. L'exemple donné ci-dessus devrait fonctionner dans tous les cas.

Les bibliothèques que l'on utilise sont :

  • La bibliothèque glib (-lglib), qui contient diverses fonctions. Seule g_print() est utilisée dans cet exemple. GTK est construit au dessus de glib et vous aurez donc toujours besoin de celle-ci. Voir la section concernant glib pour plus de détails.
  • La bibliothèque GDK (-lgdk), l'enveloppe de Xlib.
  • La bibliothèque GTK (-lgtk), la bibliothèque des widgets, construite au dessus de GDK.
  • La bibliothèque Xlib (-lX11) utilisée par GDK.
  • La bibliothèque Xext (-lXext). Cette dernière contient le code pour les pixmaps en mémoire partagée et les autres extensions X.
  • La bibliothèque mathématique (-lm). Elle est utilisée pour différentes raisons par GTK.

Compilation avec autoconf/automake

modifier

Dans configure.ac, il faut ajouter :

dnl Checks for libraries.
AM_PATH_GTK_2_0(2.2.0,,AC_MSG_ERROR(mypkgname 0.1 needs GTK+ 2.2.0))

Dans Makefile.am, il faut ajouter :

INCLUDES        = @GTK_CFLAGS@
LDADD           = @GTK_LIBS@