Le but de cette section est d'inclure à un fichier salut.c
une bibliothèque personnelle libmat.a
contenant des fonctions. Voici le fichier salut.c
:
/* * * salut.c - Exemple d'utilisation de bibliotheques personneles. * La bibliotheque utilisee ici est "libmat.h" et les fonctions * appelees sont "moi" et "mathieu". De plus, une fonction est definie * dans ce fichier source ("min"). * */ #include <stdio.h> #include <string.h> #include <libmat.h> #include <stdlib.h> main (int argc, char **argv) { int i; double rayon, aire; printf ("\n"); printf ("*********************************************\n"); printf ("bonjour à celui qui lira ça\n"); printf ("**********************************************\n"); /* Appel des fonctions definies a la fin de "salut.c" */ printf ("min 3, 5 : %d\n", min (3, 5)); printf ("min 8, 5 : %d\n", min (8, 5)); /* Appel des fonctions definies dans "libmat.h" */ moi (1, 1); mathieu (22); /* Traitement des arguments passes au programme. */ for (i = 0; i < argc; i++) printf ("argc %d argv[%d] %s \n", argc, i, argv[i]); for (i = 0; i < argc; i++) { if ((strcmp ("-h", argv[i]) == 0) || (strcmp ("--help", argv[i]) == 0)) { printf ("aide demandee...\n"); printf (" -h, --help affiche l'aide\n"); printf (" -t affiche un message\n"); } if ((strcmp ("-t", argv[i]) == 0)) { printf ("Message...\n"); } } printf ("\n"); /* for i */ } /* Definition d'une fonction juste pour tester */ int min (int a, int b) { if (a < b) return a; else return b; }
Ce qui suit traite des bibliothèques statiques, qui sont directement inclues dans le fichier binaire (exécutable) une fois la compilation faite. Ces bibliothèques ont une extension .a et se trouvent généralement dans le répertoire /usr/lib/
. Pour la programmation en C, les plus utiles sont libc.a
(bibliothèque C standard) et libm.a
( bibliothèque mathématique).
Soient deux sources moi.c
:
int moi(int nom, int prenom) { printf ("J'ai %d prenom et %d nom.\n", prenom, nom); return -1; }
et mathieu.c
:
int mathieu(int age) { printf("Mathieu a %d ans...\n", age); }
contenant des fonctions. Pour utiliser ces bibliothèques, il faut :
gcc -c moi.c mathieu.c
libmat.a
:
ar r libmat.a moi.o mathieu.o
ranlib libmat.a
libmat.h
:
extern int mathieu(int );
extern int moi(int , int );
libmat.a
) dans le sous-répertoire lib/
et l'en tête (libmat.h
) dans le sous répertoire include/
libmat.a
par l'argument -lmat :
gcc -I include -L lib -O salut.c -o salut -lmat
Le préfixe lib et le suffixe .a sont sous-entendus.