Ceci est une ancienne révision du document !
Exemple avec la librairie HDF5 en version 1.8.9
Dans le sous-répertoire lib
du répertoire d'installation /softs/Hdf5/1.8.9/gnu/4.6.3
on peut voir que la librairie est disponible en statique et dynamique :
ls /softs/Hdf5/1.8.9/gnu/4.6.3/lib libhdf5.a libhdf5.so ...
Que se soit en statique ou en dynamique, pour utiliser cette librairie, à l'édition de liens (étape de compilation), il faut rajouter :
-L/softs/Hdf5/1.8.9/gnu/4.6.3/lib -lhdf5
Par défaut, c'est la version dynamique qui est d'abord cherchée à l'édition de liens. Dans ce cas, à l'exécution du programme (p.ex sur les nœuds), la variable LD_LIBRARY_PATH
devra contenir le chemin de la librairie dynamique. Pour cela, rajouter cette ligne dans le script d'exécution :
setenv LD_LIBRARY_PATH "/softs/Hdf5/1.8.9/gnu/4.6.3/lib:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH="/softs/Hdf5/1.8.9/gnu/4.6.3/lib:$LD_LIBRARY_PATH"
Pour linker avec la version statique, il faut utiliser l'option -static
. Exemple :
gcc ... -static ... -L/softs/Hdf5/1.8.9/gnu/4.6.3/lib -lhdf5 ...
Utiliser l'option -static
implique de linker toutes les librairies en statique. Pour que seule la librairie voulue (ici libhdf5) soit liée en statique, utiliser le nom complet de la librairie :
gcc ... -static ... -L/softs/Hdf5/1.8.9/gnu/4.6.3/lib/libhdf5.a ...
La discussion ci-dessus se pose seulement si les deux versions (statique et dynamique) sont installées (comme pour HDF5). Si pour une autre librairie seule l'une des versions (statique ou dynamique) est installée, il suffit de rajouter -L/répertoire_de_recherche -lnom_librairie
pour linker avec libnom_librairie.a
(ou libnom_librairie.so
).