2013-04-28
Objectif : créer des exécutables GTK+3 indépendants pour Linux.
Les applications GTK+3 sous GNU/Linux sont normalement conçues pour être exécutées via des bibliothèques système dont le chemin est figé ; c'est d'ailleurs de cette manière que la plupart des programmes fonctionnent sur ce système (alors que, sous Windows et Mac OS X, il est plutôt recommandé de fournir des bibliothèques à chemin relatif avec chaque application).
Il y a cependant certains cas où on a envie de tout avoir dans un seul exécutable : par exemple pour un installeur graphique, logiciel de démonstration, application destinée à de vieilles distributions n'ayant pas GTK+3 (Debian "Squeeze" et CentOS 6 par exemple) ; ou plus simplement quand l'utilisateur final n'a pas la possibilité d'installer les bibliothèques lui-même (utilisateurs non-techniciens ou restreints).

À noter que, légalement, la bibliothèque est fournie sous licence LGPL : cela signifie que vous ne pourrez faire ceci que si votre application est elle-même sous GPL/LGPL !
/opt/ pour obtenir le répertoire "/opt/gtk342_static/" :sudo tar xfvj gtk342_static-LINUX_\(TARNYKO\).tar.bz2 -C /opt
.pc de pkg-config à leur nouvel emplacement :cd /opt/gtk342_static/
find . -name '*.pc' | while IFS= read -r pc; do sudo sed -i "s@^prefix=.*@prefix=$PWD@" $pc"; done
pkg-config d'y chercher les bibliothèques :export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/gtk342_static/lib/pkgconfig
pkg-config --cflags gtk+-3.0
(si un message du type "Package xi was not found" apparaît, vous aurez besoin de faire :
Compiler votre programme avec ce type de commande :
gcc monprogramme.c -o monprogramme `pkg-config --cflags gtk+-3.0` \
-L/opt/gtk342_static/lib -lgtk-3 -lgdk-3 -lgdk_pixbuf-2.0 -latk-1.0 -lpangocairo-1.0 \
-lpangoft2-1.0 -lpango-1.0 -lcairo-gobject -lcairo -lpixman-1 -lfontconfig -lfreetype \
-lgobject-2.0 -lgmodule-2.0 -lgio-2.0 -lglib-2.0 -lffi -ljpeg -ltiff -lpng -lxml2 \
-llzma -lz -liconv -lX11 -lXrender -lXi -lm -lresolv -lrt
(P.S.: : l'ordre des arguments est très important, ne le changez pas !)
Comme vous pourrez le voir, sans bibliothèques GTK+3 installées...

... l'application fonctionnera !
