next up previous contents index
Next: Compiler à partir de Up: Programmation en C Previous: Compilation à partir de

       
Créer des bibliothèques C

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 :

1.
Compiler chaque source :
gcc -c moi.c mathieu.c

2.
Créer la bibliothèque libmat.a :
ar r libmat.a moi.o mathieu.o  

3.
Génerer l'index :
ranlib libmat.a  

4.
Ecrire l'en-tête dans le fichier libmat.h :
extern int mathieu(int );
extern int moi(int , int );

5.
Placer la bibliothèque (libmat.a) dans le sous-répertoire lib/ et l'en tête (libmat.h) dans le sous répertoire include/
6.
Pour compiler un fichier source appellant cette bibliothèque, inclure les répertoires précedents, en demandant à l'éditeur de liens d'utiliser 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.



 
next up previous contents index
Next: Compiler à partir de Up: Programmation en C Previous: Compilation à partir de
MATHIEU DECORE
1999-11-03
Merci de me dire ce que pensez de ce document.