Aller au contenu

Programmation GTK/Compilation de Bonjour tout le monde

Un livre de Wikilivres.


Compilation "à la main"

[modifier | modifier le wikicode]

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 | modifier le wikicode]

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@