Para una sola vez, establezca la variable LD_LIBRARY_PATH
a una lista de directorios separados por dos puntos para buscar. Esto es análogo a PATH
para ejecutables, excepto que los directorios del sistema estándar se buscan adicionalmente después de los especificados a través del entorno.
LD_LIBRARY_PATH=/usr/local/lib64 ./cart5
Si tiene un programa que mantiene las bibliotecas en una ubicación no estándar y no puede encontrarlas por sí mismo, puede escribir un script contenedor:
#!/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 lista de directorios del sistema estándar se mantiene en /etc/ld.so.conf
. Los sistemas recientes permiten que este archivo incluya otros archivos; si el tuyo contiene algo como include /etc/ld.so.conf.d/*.conf
, crea un nuevo archivo llamado /etc/ld.so.conf.d/mala.conf
que contiene los directorios que desea agregar. Después de cambiar /etc/ld.so.conf
o un archivo incluido, ejecute /sbin/ldconfig
para que sus cambios surtan efecto (esto actualiza un caché).
(LD_LIBRARY_PATH
también se aplica a muchos otros unices, incluidos FreeBSD, NetBSD, OpenBSD, Solaris y Tru64. HP-UX tiene SHLIB_PATH
y Mac OS X tiene DYLD_LIBRARY_PATH
. /etc/ld.so.conf
tiene análogos en la mayoría de los dispositivos, pero la ubicación y la sintaxis difieren más ampliamente).
Si desea evitar LD_LIBRARY_PATH, también puede hacerlo durante la vinculación:
gcc -o exename -L/path/to/dynamiclib/ -lnameofLib \
-Wl,-R/path/to/dynamiclib/ sourceCode1.c ...
El -Wl,... se utiliza para pasar comandos adicionales al enlazador y, en este caso, con -R le indica al enlazador que almacene esta ruta como la "ruta de búsqueda predeterminada" para el .so.
Guardo notas de muchos pequeños consejos como este, en mi sitio:
https://www.thanassis.space/tricks.html