Tarnyko's website
Tarnyko's website
about

GTK+3 statique sous Linux

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).

gtk3

À 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 !

1) Installer GTK+3 "static" pour Linux

  1. Télécharger : gtk342_static-LINUX_(TARNYKO).tar.bz2 (7,20 Mo).
     
  2. Extraire l'archive dans /opt/ pour obtenir le répertoire "/opt/gtk342_static/" :
sudo tar xfvj gtk342_static-LINUX_\(TARNYKO\).tar.bz2 -C /opt
  1. Adapter les fichiers .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
  1. Indiquez à pkg-config d'y chercher les bibliothèques :
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/gtk342_static/lib/pkgconfig
  1. Tester !
pkg-config --cflags gtk+-3.0

(si un message du type "Package xi was not found" apparaît, vous aurez besoin de faire :

2) Compiler une application

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 !)

3) Tester

Comme vous pourrez le voir, sans bibliothèques GTK+3 installées...

01

... l'application fonctionnera !

02