Compilation de bibliothèque statique

Programming, Math, etc. · lab

Voir tous les documents en programmation

Compilation de bibliothèque statique

La compilation de bibliothèques ne pose pas de difficultés particulières, mais nécessite des options en ligne de commande rarement utilisées.

Dans ce premier exercice, vous allez réaliser une compilation de bibliothèque statique.

fichier nommé fact.c contenant

Créez un l'implémentation d'une fonction factorielle(), ainsi qu'un fichier fact.h contenant le prototype de votre fonction.

la Créez un programme nommé calcule_factorielle.c qui routine factorielle() pour chaque argument de la ligne de commande, et affiche le résultat.

invoque

fichier objet Compilez d'abord votre bibliothèque pour obtenir un nommé fact.o. Employez ensuite l'archiveur ar(1) et son option rcs pour créer une bibliothèque nommée libfact.a contenant fichier objet précédent.

Publicité

le

Vous pouvez à présent compiler le programme calcule_factorielle.c pour obtenir un fichier exécutable. Pour cela il faut ajouter l'option -static sur la ligne de commande. Il faut également indiquer la bibliothèque à inclure avec l'option -lfact après le fichier source à compiler. N'oubliez pas d'employer l'option -L pour préciser l'emplacement de la bibliothèque.

factsol.c

/************************************************************************\

libfactsol

Bibliothèque implémentant la fonction factorielle()

Travaux pratiques de la formation "Linux en Environnement Industriel"

(c) 2005 Christophe Blaess

Publicité

\************************************************************************/

long int factorielle(long int n) { long int f = 1; while(n > 1) { f = f * n; n = n - 1; } return f; }

Le programme utilisant la factorielle est ici :

calcule_factorielle_sol.c

/************************************************************************\

calcule_factorielle_sol

Programme faisant appel à la bibliothèque implémentant la fonction factorielle().

Travaux pratiques de la formation "Linux en Environnement Industriel"

Publicité

(c) 2005 Christophe Blaess

\************************************************************************/

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <factsol.h>

int main (int argc, char * argv[]) { long int n; int i; if (argc < 2) { fprintf(stderr, "usage: %s valeurs...\n", argv[0]); exit(EXIT_FAILURE); } for (i = 1; i < argc; i ++) if (sscanf(argv[i], "%ld", & n) == 1) fprintf(stdout, "%ld! = %ld\n", n, factorielle(n)); return EXIT_SUCCESS; }

Et voici les étapes de compilation :

$ ls -l *fact* -rw-r--r-- 1 ccb ccb 754 avr 30 02:48 calcule_factorielle_sol.c -rw-r--r-- 1 ccb ccb 431 avr 30 03:13 factsol.c -rw-r--r-- 1 ccb ccb 92 avr 29 09:34 factsol.h $ gcc -I. -c factsol.c $ ls -l *fact* -rw-r--r-- 1 ccb ccb 754 avr 30 02:48 calcule_factorielle_sol.c -rw-r--r-- 1 ccb ccb 431 avr 30 03:13 factsol.c -rw-r--r-- 1 ccb ccb 92 avr 29 09:34 factsol.h -rw-r--r-- 1 ccb ccb 727 avr 30 03:26 factsol.o $ ar -rcs libfactsol.a factsol.o $ gcc -static -I. -L. calcule_factorielle_sol.c - lfactsol -o calcule_factorielle_sol_static $ ./calcule_factorielle_sol_static 8 8! = 40320 $