2010-04-07 17 views
5

Tengo un objeto compartido (libxyz.so). Dado LD_LIBRARY_PATH, ¿cómo se puede encontrar la ubicación exacta de este objeto compartido? Si tuviera un binario que depende de esta lib, habría usado ldd en eso.LD_LIBRARY_PATH: cómo encontrar un objeto compartido

Aquí está la razón por la que pregunto: Tengo un script cgi que funciona cuando se usa LD_LIBRARY_PATH para decir VALUE1. No funciona cuando la ruta se establece en VALUE2. Me gustaría encontrar la ubicación exacta de la biblioteca según lo especificado por el camino en valor1 (Tenga en cuenta que no tiene casi 20 + VALOR1 diferentes ubicaciones)

Plataforma: Linux

Respuesta

9

Pon esto en un archivo:

#!/bin/bash 
IFS=: 

for p in ${LD_LIBRARY_PATH}; do 
    if [ -e ${p}/libxyz.so ]; then 
     echo ${p} 
    fi 
done 

y ejecútelo.

+0

Gracias por la respuesta. Me preguntaba si hay una herramienta de Linux existente para esto. Además, noté algunos archivos dentro de las carpetas lib que tienen nombres de ruta a otras carpetas lib, así que esto también necesita mirar recursivamente esos directorios – CuriousDawg

+0

oh btw, esto no funciona sin primero dividir la ruta usando: delimitador – CuriousDawg

+1

@CuriousDawg - did prueba el ejemplo exactamente como lo escribí? 'IFS =:' le dice a bash que trate: como delimitador (o separador de campo en el lenguaje bash). –

0

poner un sueño (30); en su cgi, ábralo desde un navegador, luego busque en/proc/$ (pidof mycgi)/maps las librerías actuales utilizadas por su programa.

3

También puede usar ldd. Para ello, se debe:

  1. Conjunto LD_LIBRARY_PATH para el valor cuando funciona (es decir export LD_LIBRARY_PATH=VALUE1)
  2. Run ldd /path/to/prog | grep libxyz.so
+0

Sí, puedo hacer eso, pero este es un script cgi y ldd no funciona en los scripts – CuriousDawg

+0

@CuriousDawg - si es un script, ejecute 'ldd' en el intérprete (es decir, el programa después de' #! ') –

Cuestiones relacionadas