The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Проверка зависимостей от библиотек (lib ldd gcc asterisk)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: lib, ldd, gcc, asterisk,  (найти похожие документы)
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. Она выведет вам примерно следующее: [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, чтобы проверить, может ли она загружаться теперь. По необходимости повторите выше описанные шаги. This work is licensed under a Creative Commons License.

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Ваш комментарий
Имя:         
E-Mail:      
Заголовок:
Текст:





  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor