Programmation GTK/Compilation de Bonjour tout le monde
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. Seuleg_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@