next up previous contents index
Next: Quelques mots sur Up: La compilation Previous: Les Makefiles

Les librairies

Les librairies sont des collections de fichiers .o qui définissent des fonctions que l'on souhaite réutiliser souvent. L'exemple fondamental est la libc, celle qui contient entre autre (presque) toutes les fonctions ANSI comme printf. Tant que l'on s'y restreint, pas de problème, gcc la rajoute automatiquement à ton programme par défaut, donc on ne s'en occuppe pas, mais la suite de cette section te concerne surement car j'ai bien dit presque : les fonctions mathématiques (sin, cos, sqrt, ... ) sont dans une autre librairie, la libm, continuons donc :

        Les librairies unix sont situées traditionellement dans le répertoire /usr/lib, et portent des noms commençant par lib et finissant par .a, ex: libc.a, libm.a et libX11.a. Cette dernière contient les fonctions graphiques donc MacLib a besoin si tu l'utilises. À ce sujet, il est facile de savoir quand on a oublié de mettre une librairie : la dernière étape du make, le linkage produit des erreurs du genre undefined reference to: Xtruc, et pas qu'une seule en général. MacLib aussi est une librairie : MacLib.a, mais attention, libm et libX11 sont des librairies standard que gcc sait (en principe) trouver, ainsi pour utiliser la libm on lui passe simplement l'option -lm, mais les librairies persos comme MacLib doivent figurer explicitement comme un fichier objet sur la ligne de linkage, et il faudra faire attention à utiliser la version de MacLib qui correspond à la machine utilisée (elles sont dans le répertoire /Xshare/pub/TCinfo/MacLib). Concrètement, si on utilise un seul fichier mais avec des maths et MacLib, on recopiera la bonne version de MacLib dans le répertoire courant et on tapera

gcc TD.c MacLib.a -lm -lX11 -o TD
et si l'on utilise un Makefile, on fera par exemple la modification suivante:
.c.o:
     gcc -c $<

OBJS = un.o deux.o trois.o
LIBS = MacLib.a -lm -lX11

compte: $(OBJS)
     gcc $(OBJS) $(LIBS) -o $@

un.o: un.c graph.h
deux.o: deux.c
trois.o: trois.c graph.h
Malheureusement tu te rendras vite compte si les machines sont aussi bien configurées que cette année, qu'il faudra aider gcc à trouver les librairies, ce qui peut impliquer une ligne de commande comme :
gcc TD.c MacLib.a -lm -L/usr/X11/lib -lX11
où l'option -L indique le répertoire où trouver les librairies, rappelons pour ceux qui auraient à les chercher que -lX11 correspond à libX11.a et que pour avoir la liste des fonctions contenues dans la librairie, c'est la commande nm -s libX11.a

Enfin, un peu d'errudition sur la différence entre une librairie statique et une librairie dynamique :

 


next up previous contents index
Next: Quelques mots sur Up: La compilation Previous: Les Makefiles




Wed Jun 25 13:24:35 MET DST 1997