Pour une utilisation ponctuelle, définissez la variable LD_LIBRARY_PATH
à une liste de répertoires séparés par deux-points à rechercher. Ceci est analogue à PATH
pour les exécutables, sauf que les répertoires système standard sont également recherchés après ceux spécifiés via l'environnement.
LD_LIBRARY_PATH=/usr/local/lib64 ./cart5
Si vous avez un programme qui conserve les bibliothèques dans un emplacement non standard et n'est pas capable de les trouver par lui-même, vous pouvez écrire un script wrapper :
#!/bin/sh
if [ -n "$LD_LIBRARY_PATH" ]; then
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64
else
LD_LIBRARY_PATH=/usr/local/lib64
fi
export LD_LIBRARY_PATH
exec /path/to/cart5 "[email protected]"
La liste des répertoires système standard est conservée dans /etc/ld.so.conf
. Les systèmes récents permettent à ce fichier d'inclure d'autres fichiers; si le vôtre contient quelque chose comme include /etc/ld.so.conf.d/*.conf
, créez un nouveau fichier appelé /etc/ld.so.conf.d/mala.conf
contenant les répertoires que vous souhaitez ajouter. Après avoir changé /etc/ld.so.conf
ou un fichier inclus, exécutez /sbin/ldconfig
pour que vos modifications prennent effet (cela met à jour un cache).
(LD_LIBRARY_PATH
s'applique également à de nombreux autres unices, notamment FreeBSD, NetBSD, OpenBSD, Solaris et Tru64. HP-UX a SHLIB_PATH
et Mac OS X a DYLD_LIBRARY_PATH
. /etc/ld.so.conf
a des analogues sur la plupart des unix mais l'emplacement et la syntaxe diffèrent plus largement.)
Si vous souhaitez éviter LD_LIBRARY_PATH, vous pouvez également le faire, lors de la liaison :
gcc -o exename -L/path/to/dynamiclib/ -lnameofLib \
-Wl,-R/path/to/dynamiclib/ sourceCode1.c ...
Le -Wl,... est utilisé pour passer des commandes supplémentaires à l'éditeur de liens, et dans ce cas, avec -R vous dites à l'éditeur de liens de stocker ce chemin comme "chemin de recherche par défaut" pour le .so.
Je garde des notes de nombreux petits conseils comme celui-ci, sur mon site :
https://www.thanassis.space/tricks.html