# création et utilisation des librairies en langage de programmation C
Création et utilisation des librairies en langage de programmation C
Qu'est ce qu'une librairie ?
En langage de programmation C, une librairie est un fichier contenant du code compilé pouvant être utilisé à souhait par un programme. Ce qui permet de faciliter la tache de programmation et de rendre le programme modulaire.
Il existe trois types de librairies en langage C :
- les librairies statiques
- les librairies partagées
- les librairies chargées dynamiquement
Les librairies statiques
Ce sont des librairies installées dans un programme avant que ce programme puisse être exécuté. Elles sont donc installées dans ce programme au moment de la compilation. Ces librairies sont également connues sous le nom d'archives. Leur nom contient le suffixe ".a" sur GNU/Linux et ".lib" sur Microsoft Windows.
Création d'une librairie statique sur GNU/Linux
Le fichier lib_foobar.h de la lib :
|
|
Le fichier lib_foobar.c de la lib :
|
|
Je compile la lib :
|
|
Le fichier main.c du programme utilisant la lib :
|
|
Je compile le programme :
gcc prog.c lib_foobar.a -o prog
Puis, je l'exécute :
|
|
Les librairies partagées
Ce sont les librairies qui sont chargées par un programme lorsque celui-ci démarre. Leur nom contient le suffixe ".so" sur GNU/Linux et ".dll" sur Microsoft Windows.
Création d'une librairie partagée sur GNU/Linux
Le fichier lib_foobar.h de la lib :
|
|
Le fichier lib_foobar.c de la lib :
|
|
Je compile la lib :
gcc -fPIC -shared lib_foobar.c -o lib_foobar.so
Le fichier main.c du programme utilisant la lib partagée :
|
|
Je compile le programme :
gcc main.c lib_foobar.so -o prog
Ou de cette façon :
gcc prog.c -L. -l_foobar -o prog
Puis, je l'exécute en spécifiant le dossier où ce trouve la lib grace a la variable d'environnement LD_LIBRARY_PATH :
|
|
Les librairies chargées dynamiquement
Ce sont les librairies partagées qui sont chargées par un programme lorsque celui-ci le décide et non lors de son démarage. Pour chargée une librairie partagée il faut utiliser la fonction dlopen dont voici le prototype :
void *dlopen(const char *filename, int flags);
Pour pouvoir exécuter une fonction de la librairie partagée nouvellement chargée, il faut utiliser la fonction dlsym dont voici le prototype :
void *dlsym(void *handle, const char *symbol);
La fonction permettant d'obtenir la raison d'une eventuelle erreurs se nomme dlerror et voici son prototype :
char *dlerror(void);
Puis, pour décharger la librairie, il existe la fonction dlclose dont voici le prototype :
int dlclose(void *handle);
Voici maintenant le fichier .c du programme utilisant la lib partagée lib_foobar.so chargée dynamiquement :
|
|
Je compile le programme :
gcc main.c -ldl
Puis, je l'exécute :
|
|
Fin
Exemple de programme utilisant des librairies partagées : http://syndrome.sagwin.org/ : Un bot IRC modulable écrit par Thaeron.
Happy coding !