Per una volta sola, imposta la variabile LD_LIBRARY_PATH
a un elenco di directory separate da due punti in cui eseguire la ricerca. Questo è analogo a PATH
per gli eseguibili, tranne per il fatto che le directory di sistema standard vengono ulteriormente cercate dopo quelle specificate attraverso l'ambiente.
LD_LIBRARY_PATH=/usr/local/lib64 ./cart5
Se hai un programma che mantiene le librerie in una posizione non standard e non è in grado di trovarle da solo, puoi scrivere uno 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]"
L'elenco delle directory di sistema standard è conservato in /etc/ld.so.conf
. I sistemi recenti consentono a questo file di includere altri file; se il tuo contiene qualcosa come include /etc/ld.so.conf.d/*.conf
, crea un nuovo file chiamato /etc/ld.so.conf.d/mala.conf
contenente le directory che si desidera aggiungere. Dopo aver modificato /etc/ld.so.conf
o un file incluso, esegui /sbin/ldconfig
affinché le modifiche abbiano effetto (questo aggiorna una cache).
(LD_LIBRARY_PATH
si applica anche a molti altri unix, inclusi FreeBSD, NetBSD, OpenBSD, Solaris e Tru64. HP-UX ha SHLIB_PATH
e Mac OS X ha DYLD_LIBRARY_PATH
. /etc/ld.so.conf
ha analoghi sulla maggior parte degli unice ma la posizione e la sintassi differiscono maggiormente.)
Se vuoi evitare LD_LIBRARY_PATH, puoi anche farlo, durante il collegamento:
gcc -o exename -L/path/to/dynamiclib/ -lnameofLib \
-Wl,-R/path/to/dynamiclib/ sourceCode1.c ...
Il -Wl,... è usato per passare comandi extra al linker, e in questo caso, con -R dici al linker di memorizzare questo percorso come "percorso di ricerca predefinito" per .so.
Prendo nota di tanti piccoli consigli come questo, sul mio sito:
https://www.thanassis.space/tricks.html