turrier.fr

Source : ct|23.04.08

< Tutoriels Informatique, Multimédia, Chinois

Créer et utiliser une librairie statique en C ou C++

Une librairie statique (extension .a ou .lib) est un fichier contenant des fonctions qui seront intégrées à l'exécutable après la phase d'édition des liens. A l'inverse une librairie dynamique (extension .dll) est un fichier contenant des fonctions qui ne seront pas intégrées à l'exécutable après la phase d'édition des liens; dans ce cas, l'exécutable appelera la librairie DLL pendant l'exécution pour obtenir les fonctions souhaitées.

Dans le présent tutoriel, nous allons apprendre à créer puis à utiliser une librairie statique en C. Ensuite nous l'utiliserons dans un programme C++. Pour effectuer ce travail, nous utiliserons l'environnement de développement GNU GPL (freeware) Code::Blocks. Les environnements de développement DevCpp ou Visual Studio C++ permettent d'obtenir le même résultat, en procédant de la même façon.

Créer une librairie statique

Lancez CodeBlocks et créez un nouveau projet de type "Static Library" (File/New/Project/Static Library/Go).

image1

Donnez un nom à votre projet ("malibrairie" par exemple), et attribuez-lui un répertoire de destination ("C:/essai" par exemple).

image2

Effacez ce qui se trouve par défaut dans le fichier source "main.cpp" de la librairie, et saisissez le code suivant. Ce code correspondant à une fonction exemple simple qui multiplie par 5 un nombre dont l'adresse lui est passée en paramètre.

void cinq(int *i)
{
int n;
n=*i;n=5*n;
*i=n;
}

image3

Cliquez l'option de menu "Build/Run".

image4

Aussitôt CodeBlocks fabrique le fichier librairie dans le répertoire "C:/essai/malibrairie" et lui donne le nom "libmalibrairie.a".

image5

Vous pouvez remarquer que CodeBlocks et DevCpp donnent une extension ".a" aux librairies, alors que Visual Studio leur donne une extension ".lib". Cela ne pose pas de problème.

Nous allons maintenant utiliser depuis un programme C++ la librairie "libmalibrairie.a" que nous venons de créer.

Utiliser la librairie statique

Créez un nouveau projet de type "Win32 GUI".

image6

Choisissez une application de type "Frame based".

image7

Donnez lui un nom ("monprogramme" par exemple) et un répertoire de destination (C":/essai" par exemple).

image8

Effacez le code présenté par défaut, dans le fichier "main.cpp" de ce nouveau projet, et placez-y le code suivant qui est beaucoup plus court et amplement suffisant pour tester notre librairie:

#include "windows.h"
extern "C" void cinq (int *);
int APIENTRY WinMain(HINSTANCE h1,HINSTANCE h2,LPSTR l,int n)
{
int x;
char texte[80];
x=2;
cinq(&x);
wsprintf(texte,"%d",x);
MessageBox(NULL,texte,"",MB_OK);
return 0;
}

image9

A priori CodeBlocks ne connaît pas le fichier librairie utilisé, ni son emplacement. Il faut donc le lui déclarer de façon à ce qu'il puisse effectuer la compilation et l'édition des liens sans afficher d'erreur. Pour cela, sélectionnez l'option de menu "Project/Build options/Linker Settings" et ajouter au projet, dans la fenêtre "link libraries:" le chemin de votre fichier librairie "libmalibrairie.a" puis cliquez "OK".

image10

Cliquez "Build/Build and run". La compilation et l'édition des liens s'effectuent, en intégrant dans l'exécutable les fonctions nécessaires et présentes dans la librairie statique. Puis votre programme s'exécute. On obtient bien 5x2=10... Les choses fonctionnent correctement.

image11


Valid XHTML 1.0 Transitional

© http://turrier.fr (2007)