Utiliser pkg-config pour faciliter l’édition des liens

Vous avez sans doute déjà fait l’expérience du compilateur qui ne trouve pas les fichiers d’entête ou les bibliothèques utilisées et vous gratifie d’un beau « file not found ». S’ensuit alors une recherche minutieuse de l’ensemble des fichiers nécessaires qu’il faudrat ensuite aller renseigner au compilateur lors de la compilation. He bien, sachez que ce cauchemar peut s’arrêter maintenant car il existe un outil spécialement conçu pour résoudre ce problème. Il s’agit de pkg-config!

Pkg-config est un logiciel qui accède à des fichiers relatifs aux bibliothèques utilisées contenant tous les fichiers à renseigner au compilateur. Par exemple, si vous utilisez la bibliothèque SDL dans votre projet, il suffit de demander à pkg-config de vous donner les renseignements concernant cette bibliothèque. Pour ce faire, rien de plus simple, voici le format courant de la commande (il existe beaucoup d’autres options et je vous invite à lire le manuel):

pkg-config [––cflags] [––libs] <bibliotheque>

L’option ––cflags demande d’obtenir les options de compilation avec les dossiers contenant les fichiers d’entête et l’option ––libs concerne les fichiers de bibliothèque.

Ainsi, pour l’exemple avec la SDL, cela donne:

pkg-config ––cflags ––libs sdl

Et pkg-config nous répond par

-D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -Wl,-rpath,/usr/lib -lSDL -lpthread

Qui sont les options qu’il faudrat renseigné à gcc pour la compilation.
Auriez-vous pensé à indiquer tout cela?

Pour savoir quelles sont les bibliothèques supportées, allez dans le dossier /usr/lib/pkgconfig. Ce dossier contient tout un ensemble de fichiers avec une extension .pc. Le nom des fichiers correspond au nom de la bibliothèque. Attention, une bibliothèque peut posséder différents fichiers .pc, par exemple pour Qt:

Qt3Support.pc            QtDBus.pc      QtOpenGL.pc     QtSvg.pc     QtXml.pc
QtAssistantClient.pc     QtGui.pc        QtScript.pc       QtTest.pc
QtCore.pc                  QtNetwork.pc  QtSql.pc           QtUiTools.pc

Vous pouvez dès lors simplifier vos appels au compilateur:

gcc `pkg-config ––cflags ––libs sdl` test.c -o test

Ou dans votre Makefile, la variable CFLAGS par exemple contiendrait `pkg-config ––cflags <bibliotheques> `

En plus de la simplicité, cette méthode vous permet de mettre des options de compilation conseillées par les développeurs de la bibliothèque. Elle regroupe ainsi toutes les qualités requisent pour être utilisée par tous les développeurs en herbe que vous êtes 😀

Laisser un commentaire