Ceci est une ancienne révision du document !


L'édition de liens (linkage) d'une librairie

Exemple avec la librairie HDF5 en version 1.8.9

Linkage Statique ou Dynamique

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'étape d'édition de liens, il faut rajouter :

 -L/softs/Hdf5/1.8.9/gnu/4.6.3/lib -lhdf5 

Utilisation de la version dynamique

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 :

  • Pour csh (et tcsh) :
setenv LD_LIBRARY_PATH "/softs/Hdf5/1.8.9/gnu/4.6.3/lib:$LD_LIBRARY_PATH"
  • Pour sh (et bash) :
export LD_LIBRARY_PATH="/softs/Hdf5/1.8.9/gnu/4.6.3/lib:$LD_LIBRARY_PATH"

Utilisation de la version statique

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 ...
<code>

===== Remarques =====

==== -static ====
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 :

<code>
gcc ... /softs/Hdf5/1.8.9/gnu/4.6.3/lib/libhdf5.a ...

Disponibilité

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).

documentation/tutorials/build/links.1360256000.txt.gz · Dernière modification : 2020/08/25 15:58 (modification externe)