LD_LIBRARY_PATH: как найти общий объект - PullRequest
6 голосов
/ 07 апреля 2010

У меня есть общий объект (libxyz.so). Учитывая LD_LIBRARY_PATH, как найти точное местоположение этого общего объекта? Если бы у меня был бинарный файл, который зависит от этой библиотеки, я бы использовал ldd для этого.

Вот причина, по которой я спрашиваю: У меня есть скрипт CGI, который работает при использовании LD_LIBRARY_PATH, чтобы сказать VALUE1. Это не работает, когда путь установлен в VALUE2. Я хотел бы найти точное местоположение библиотеки, как указано путем в VALUE1 (обратите внимание, что VALUE1 имеет почти 20+ различных местоположений)

Платформа: Linux

Ответы [ 3 ]

11 голосов
/ 07 апреля 2010

Поместите это в файл:

#!/bin/bash
IFS=:

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

и запустите его.

4 голосов
/ 07 апреля 2010

Вы также можете использовать ldd.Для этого вы должны:

  1. Установить для LD_LIBRARY_PATH значение, когда оно работает (т. Е. export LD_LIBRARY_PATH=VALUE1)
  2. Выполнить ldd /path/to/prog | grep libxyz.so
0 голосов
/ 07 апреля 2010

уснуть (30);в вашем cgi запустите его из браузера, затем посмотрите в / proc / $ (pidof mycgi) / maps фактические библиотеки, используемые вашей программой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...