Créer ses propres librairies dynamiques

Supposons que nous ayons crée une collection de fonctions C/C++ que nous avons écrites dans le fichier libdyn.C. Que nous voulons compiler un programme dont le source se trouve dans le fichier prog.C, qui est sensé utiliser dynamiquement les fonctions de libdyn.C.

Aucune mesure spécifique n'a besoin d'être faite dans le code, par contre la compilation diffère et peut être suivi dans le makefile qui suit:

all:libdyn.a prog.exe
  @echo "finished"

libdyn.a:
  @echo "Compiling dynamic lib"
  g++ -fPIC -I/usr/local/include -c libdyn.C
  g++ -shared -L. -Wl,-soname,libdyn.so.1 -o libdyn.so.1.0 libdyn.o
  -ln -s libdyn.so.1.0 libdyn.so.1
  -ln -s libdyn.so.1 libdyn.so
  -LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH ;
  -export LD_LIBRARY_PATH

prog.exe:
  @echo "Compiling Program"
  g++ -g -I. -I/usr/local/include prog.C -L. -L/usr/lib -o prog.exe -ldyn

Comme l'on peut noter, la libraire est compilée en premier, les sous-fichiers de la libraire sont compilés avec l'option -fPIC, alors que le linkage est effectué en spécifiant qu'il s'agira d'une librairie dyamique (-shared).

PIC est l'acronyme pour position-independent code, donc du code qui ne contient que des pointeurs relatifs, ce qui résulte en code qui peut être placé à n'importe quel endroit de la mémoire.

L'option -Wl,-soname,libdyn.so.1 est une option qui sera passée immédiatement au 'linker' (le 'l' dans Wl) en spécifiant le nom de cette libraire.