2010-04-07 9 views
5

Mam obiekt udostępniony (libxyz.so). Biorąc pod uwagę LD_LIBRARY_PATH, w jaki sposób można znaleźć dokładną lokalizację tego udostępnionego obiektu? Gdybym miał plik binarny, który zależy od tej biblioteki, używałbym na tym ldd.LD_LIBRARY_PATH: jak znaleźć obiekt wspólny

Oto powód, dla którego pytam: Mam skrypt cgi, który działa, gdy za pomocą zestawu LD_LIBRARY_PATH ustawiono wartość VALUE1. Nie działa, gdy ścieżka ma wartość VALUE2. Chciałbym, aby znaleźć dokładną lokalizację biblioteki określony przez ścieżkę w VALUE1 (Zauważ, że VALUE1 ma prawie 20+ różne lokalizacje)

Platforma: Linux

Odpowiedz

9

umieścić to w pliku:

#!/bin/bash 
IFS=: 

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

i uruchom go.

+0

Dzięki za odpowiedź. Właśnie zastanawiałem się, czy istnieje na to narzędzie linuksowe. Zauważyłem również, że niektóre pliki w folderach lib mają nazwy ścieżek do innych folderów lib - więc to również musi rekurencyjnie przeglądać te katalogi – CuriousDawg

+0

o tak, nie działa to bez wcześniejszego podziału ścieżki za pomocą: separatora – CuriousDawg

+1

@CuriousDawg - nie wypróbujesz przykład dokładnie tak, jak to napisałem? 'IFS =:' mówi bashowi, aby traktował: jako separator (lub separator pól w języku bash). –

0

uśpij (30); w twoim cgi, uruchom go z przeglądarki, a następnie zajrzyj do/proc/$ (pidof mycgi)/map dla rzeczywistych bibliotek używanych przez Twój program.

3

Możesz także użyć ldd. Aby to zrobić, prawda:

  1. Set LD_LIBRARY_PATH wartości kiedy działa (tzn export LD_LIBRARY_PATH=VALUE1)
  2. Run ldd /path/to/prog | grep libxyz.so
+0

Tak, mogę to zrobić, ale jest to skrypt cgi, a ldd nie działa na skryptach. – CuriousDawg

+0

@CuriousDawg - jeśli jest to skrypt, uruchom 'ldd' na interpreterze (to znaczy po" #! ") –

Powiązane problemy