Suponiendo que quiero probar si una biblioteca está instalada y utilizable por un programa. Puedo usar ldconfig -p | grep mylibpara 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 ldconfigno 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.lddcumple exactamente este propósito.LIBRARY_PATHla variable de entorno que busca, por ejemplo, elgcccompilador. LaLIBRARY_PATHvariable de entorno también tiene una lista de directorios separados por dos puntos.Respuestas:
ldconfigpuede enumerar todas las bibliotecas a las que tiene acceso. Estas bibliotecas también se almacenan en su caché./sbin/ldconfig -v -Nrastreará 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
ldconfigno es portátil, ya que solo se aplica a implementaciones basadas en ela.outvinculador 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.ldconfigen 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,lariycrlecomo 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-neededevita que el vinculador descarte la biblioteca, porque no se utilizan símbolos de la biblioteca.fuente