Suponiendo que quiero probar si una biblioteca está instalada y utilizable por un programa. Puedo usar ldconfig -p | grep mylib
para averiguar si está instalado en el sistema. pero ¿qué pasa si la biblioteca solo se conoce a través de la configuración LD_LIBRARY_PATH
?
En ese caso, el programa puede encontrar la biblioteca, pero ldconfig
no lo hará. ¿Cómo puedo verificar si la biblioteca está en la ruta de enlace combinada ?
Agregaré que estoy buscando una solución que funcione incluso si realmente no tengo el programa a mano (por ejemplo, el programa aún no está compilado), solo quiero saber que existe cierta biblioteca en ld
' s caminos.
linux
dynamic-linking
ld
nbubis
fuente
fuente
ldd <binary>
para verificar si todas las bibliotecas vinculadas están en la ruta. Quizás haya una manera más elegante.ldd
cumple exactamente este propósito.LIBRARY_PATH
la variable de entorno que busca, por ejemplo, elgcc
compilador. LaLIBRARY_PATH
variable de entorno también tiene una lista de directorios separados por dos puntos.Respuestas:
ldconfig
puede enumerar todas las bibliotecas a las que tiene acceso. Estas bibliotecas también se almacenan en su caché./sbin/ldconfig -v -N
rastreará todas las rutas de biblioteca habituales, enumerará todas las bibliotecas disponibles, sin reconstruir la memoria caché (lo que no es posible si no es un usuario root). NO tiene en cuenta las bibliotecas en LD_LIBRARY_PATH (contrariamente a lo que dijo esta publicación antes de editar), pero puede pasar bibliotecas adicionales a la línea de comandos utilizando la línea a continuación:fuente
ldconfig
no es portátil, ya que solo se aplica a implementaciones basadas en ela.out
vinculador dinámico basado en SunOS-4.0 de 1987./sbin/ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH)
No me gusta demasiado para mi gusto.ldconfig
en un acuerdo con AT&T ya que el almacenamiento en caché del enlazador era demasiado sensible a los errores. Sun agregó más adelantethe tree stooges
:moe
,lari
ycrle
como los programas de ayuda para la gestión de ELF.Sustituya (espacio) globalmente
:
con LD_LIBRARY_PATHfuente
Puede compilar un programa de prueba simple con gcc y vincular su biblioteca. Luego puede verificar las bibliotecas usadas con ldd. Yo uso algo como esto:
-Wl,--no-as-needed
evita que el vinculador descarte la biblioteca, porque no se utilizan símbolos de la biblioteca.fuente