MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
Проверка зависимостей от библиотек ldd
25.04.2013
22:48
Раздел: root - Linux

Проверка зависимостей от библиотек

 

По просьбе 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. Она выведет вам примерно

следующее:

 

[root@vm lib]# ldd /usr/lib/asterisk/modules/chan_oh323.so

liboh323wrap.so => /lib/liboh323wrap.so (0x00bf2000)

libh323_linux_x86_r.so.1.13.5 => not found

libpt_linux_x86_r.so.1.6.6 => not found

libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x008fc000)

libpthread.so.0 => /lib/tls/libpthread.so.0 (0x009ff000)

libdl.so.2 => /lib/libdl.so.2 (0x00add000)

libc.so.6 => /lib/tls/libc.so.6 (0x00111000)

libm.so.6 => /lib/tls/libm.so.6 (0x0025c000)

libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0034b000)

/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00b98000)

 

 

Как видите, некоторые разделяемые библиотеки не найдены и не могут быть

загружены.

 

 

Как можно добавить необходимые разделяемые библиотеки?

 

Если вы собирали программу сами, то скорее всего необходимые разделяемые

библиотеки есть в вашей системе, но они находятся не там, где их ищет

исполняемый файл.

 

Чтобы понять, на самом ли деле это так, выполните команду

locate, как показано ниже:

 

[root@vm lib]# locate libh323_linux_x86_r.so.1.13.5

/root/asterisk/openh323/lib/libh323_linux_x86_r.so.1.13.5

 

 

Очень важно, чтобы вы искали фалы с именно такими именами, которые

ищутся вашим модулем.

 

В нашем случае достаточно будет просто скопировать библиотеку в

/lib и снова запустить ldd, чтобы проверить, может

ли она загружаться теперь.

 

По необходимости повторите выше описанные шаги.

Так же в этом разделе:
← Содержание ...
 
MyTetra Share v.0.35
Яндекс индекс цитирования