Programmer en C avec GTK sous Ubuntu


La librairie GTK+ (GIMP Toolkit ou Boîte à outils de Gimp) a été écrite en langage Cdans le cadre de la création du logiciel Gimp. Elle contient un ensemble de fonctions permettant la création d'interfaces graphiques.

Pour pouvoir commencer à faire de la programmation graphique en langage Cstrong>, avec GTK sous Ubuntu , on peut suivre la démarche suivante:
1) Vérifier la présence du compilateur gcc;
2) Vérifier la présence de la librairie GTK;
3) Compiler un programme C et le linker avec GTK;
4) Exécuter le programme.

1) Vérifier la présence du compilateur gcc

Normalement gcc est nativement présent dans les distributions Ubuntu et notamment dans la distribution Ubuntu 18.04 utilisée ici. On peut vérifier la présence de GCC sur l'ordinateur à l'aide de la commande suivante :
dpkg-query -l
Si gcc n'est pas présent dans la liste, c'est qu'il n'est pas installé; dans ce cas, on l'installe avec les commandes suivantes:
sudo apt update
sudo apt install build-essential

Cette commande installe à la fois :
dpkg-dev -dev - Debian package development tools;
g++ - GNU C++ compiler;
gcc - GNU C compiler;
libc6-dev - GNU C Library: Development Libraries and Header Files;
libc-dev - paquet virtuel fourni par libc6-dev;
make - utility for directing compilation.

2) Vérifier la présence de la librairie GTK

Il existe plusieurs versions majeures de GTK. Ces versions présentent des ruptures de compatibilité pour les programmes. La version GTK1.2 est une version ancienne, remplacée par la version GTK+2 qui apporte des fonctionnalités enrichies (prise en charge du graphisme vectoriel, du type pdf (module Cairo), des formats unicode et utf8 (module Pango)...). La version GTK+3 offre des fonctionnalités supplémentaires.

Plusieurs versions de GTK peuvent cohabiter sur un ordinateur donné, les versions GTK+2 et GTK+3 par exemple.

Pour chaque version, il existe :
- des fichiers de runtime (nécessaire pour l'exécution des programmes);
- des fichiers de développement (nécessaire pour programmer et notamment pour permettre à gcc de linker les librairies nécessaires).

Parfois les fichiers de runtime sont installés mais les fichiers de développement ne le sont pas. Pour vérifier ce qui est installé, on tape la commande : suivante :
dpkg-query -l

Par exemple, dans le cas suivant, on voit que sont installées les versions runtime de GTK+2 (version 2.24) et GTK+3 (version 3.22) ainsi que la version de développement de GTK+2 (version 2.24). Dans cet exemple , la version de développement de GTK+3 n'est pas installée.
ii libgtk-3-0:amd64 3.22.30-1ubuntu4 GTK3+ graphical user interface library
ii libgtk2.0-0:amd64 2.24.32-1ubuntu1 GTK2+ graphical user interface library
ii libgtk2.0-dev 2.24.32-1ubuntu1 development files for the GTK2+ library

04

Si le paquet libgtk2.0-dev n'apparaît pas dans la liste produite par la commande dpkg-query -l, cela signifie que la version de GTK+2 permettant de programmer des applications n'est pas installée.
Dans ce cas, on l'installe avec les commandes suivantes:
sudo apt-get update
sudo apt-get install libgtk2.0-dev

Remarque:
Si on souhaite installer la version de développement de GTK+3, on utilise les commandes suivantes:
sudo apt-get update
sudo apt-get install libgtk-3-dev

3) Compiler un programme C et le linker avec GTK

On écrit le programme simple suivant qui se contente d'afficher le résultat d'une addition dans une fenêtre graphique.

#include <gtk/gtk.h>

int main (int argc, char argv[])
{
//--mon programme C
int x=30; int y= 34; int z=0;
char buf[256];
z=100*(x+y);
sprintf(buf, "Addition de x+y" "\r" "x+y=" "%d" , z);

//--affichage du résultat dans une fenêtre gtk centrée------ GtkWidget *window;
GtkWidget *label;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Ma fenêtre");
gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_signal_connect (GTK_OBJECT (window), "destroy", GTK_SIGNAL_FUNC (gtk_main_quit ), NULL);
label = gtk_label_new (buf);
gtk_misc_set_alignment( GTK_MISC(label), 0.0, 0.0 );
gtk_container_add (GTK_CONTAINER (window), label);
gtk_widget_show (label);
gtk_widget_show (window);
gtk_main ();
//-------------------------------------------------------
return 0;
}

Fichier source : test.c

Pour compiler ce programme, on ouvre le terminal de commandes dans le répertoire du programme et on tape la commande suivante:
gcc test.c -o test `pkg-config --cflags --libs gtk+-2.0`

Remarque 1
Si l'erreur "fatal error: gtk/gtk.h: Aucun fichier ou dossier de ce type #include <gtk/gtk.h> compilation terminated." apparaît, cela signifie que la version de développement de GTK+2 n'est pas installée. Dans ce cas, on vérifie le point 2).

02

Remarque 2
Dans la commande de compilation, il faut obligatoirement utiliser des apostrophes inversées ` et non pas des apostrophes droites '.
En effet la commande gcc test.c -o test 'pkg-config --cflags --libs gtk+-2.0' avec des apostrophes droites entraine l'erreur "gcc: error: pkg-config --cflags --libs gtk+-2.0: Aucun fichier ou dossier de ce type"

03

Il n'est pas toujours facile de produire ce caractère à l'aide du clavier (les combinaisons de touches conseillées peuvent fonctionner ou non...). Une méthode simple et sûre, pour récupérer cette apostrophe, consiste à la copier dans le Presse-papiers, depuis LibreOffice Writer (menu Insertion/Caractères spéciaux).

01

4) Exécuter le programme

Pour exécuter le programme on saisit la commande suivante:
./test

05

Remarque
Si lors de l'exécution du programme un message d'erreur de la forme "Failed to load module "canberra-gtk-module" apparaît, il suffit d'installer le module manquant puis de vérifier sa présence à l'aide de la commande dpkg-query -l. Normalement tout doit rentrer dans l'ordre.
Par exemple:
sudo apt-get update
sudo apt-get install libcanberra-gtk-dev