From: Romik <http://romik-g.livejournal.com>
Newsgroups: email
Date: Mon, 15 Jan 2007 14:31:37 +0000 (UTC)
Subject: Проверка зависимостей от библиотек
По просьбе anest'a.
Перевод статьи Checking library dependencies (http://www.astrecipes.net/index.php?n=76).
Публикуется на условиях оригинала: Creative Commons License (Attribution-ShareAlike 2.0).
Оригинал перевода: http://romik-g.livejournal.com/20941.html
Строго говоря, это относится не только к Asterisk, но я помещаю это
здесь, так как это довольно распространенная задача при установке, после
сборки его с разделяемыми библиотеками (например OH323).
Вот типичный пример ошибки, которая говорит о том, что вам необходимо
проверить зависимости библиотек:
[chan_oh323.so] May 2 15:41:29 WARNING [-1218537120]: loader.c:242 ast_load_resource: liboh323wrap.so:
cannot open shared object file: No such file or directory
May 2 15:41:29 WARNING[-1218537120]: loader.c:423 load_modules: Loading module chan_oh323.so failed!
В данном случае Asterisk ругается, что не смотря на то, что модуль
chan_oh323 существует и подлежит загрузке, он не может полностью
загрузиться, ввиду отсутствия некоторых разделяемых библиотек.
Что такое разделяемая библиотека?
Разделяемая библиотека - это часть скомпилированного программного кода,
который может использоваться несколькими программами в вашей системе.
Таким образом, отпадает необходимость включения одного и того же кода
подпрограмм в каждый исполняемый файл на вашем жестком диске.
Отрицательные стороны такого подхода состоят в том, что она просто
отказывается работать, если вы копируете программу в другую систему и
она не находит необходимых ей библиотек в определенных системных
директориях.
Как определить, какие разделяемые библиотеки требуются для работы модуля?
В этом вам поможет программа ldd. Она выведет вам примерно
следующее:
Как видите, некоторые разделяемые библиотеки не найдены и не могут быть
загружены.
Как можно добавить необходимые разделяемые библиотеки?
Если вы собирали программу сами, то скорее всего необходимые разделяемые
библиотеки есть в вашей системе, но они находятся не там, где их ищет
исполняемый файл.
Чтобы понять, на самом ли деле это так, выполните команду
locate, как показано ниже: