- Просмотр информации о библиотеке Linux /исполняемой версии
- 3 ответа
- unixforum.org
- Общий порядок компиляции + как узнать версию библиотеки
- Общий порядок компиляции + как узнать версию библиотеки
- Linux посмотреть версию библиотеки
- ИТ База знаний
- Полезно
- Навигация
- Серверные решения
- Телефония
- Корпоративные сети
- Управление библиотеками в Linux
Просмотр информации о библиотеке Linux /исполняемой версии
В Windows, EXE и DLL есть информация о версии, включая по крайней мере следующие поля:
- версия файла
- версия продукта
- внутреннее имя
- название продукта
- авторские права
В библиотеке Linux /Исполняемый файл:
- Какие поля присутствуют?
- Как просмотреть такую информацию?
- Какие инструменты /библиотеки следует читать?
3 ответа
Информация о версии, явно не сохраненная в файле ELF. У вас есть имя библиотеки, soname , которая включает основную версию. Полная версия обычно хранится как часть имени файла библиотеки.
Если у вас есть библиотека, скажите libtest.so , тогда вы обычно имеете:
- libtest.so.1.0.1 — сам файл библиотеки, содержащий полную версию
- libtest.so.1 — Symlink на libtest.so.1.0.1 , имеющий то же имя, что и soname
- libtest.so — Симлинк к libtest.so.1 , используемый для связывания .
В файле библиотеки libtest.so.1.0.1 появится запись с именем SONAME в динамическом разделе, который скажет, что эта библиотека называется libtest.so.1 . Когда вы связываете программу с этой библиотекой, связанная программа будет хранить soname библиотеки в разделе NEEDED в динамическом разделе.
Если вы хотите проверить, что именно находится в файле ELF, вы можете попробовать запустить:
где elffile может быть либо библиотекой исполняемого файла.
Если вы просто хотите получить версию библиотеки, вы можете играть с помощью:
AFAIK, в исполняемых файлах нет такой информации (по крайней мере, не по умолчанию).
Или вы можете положиться на саму программу или на свою систему упаковки, как писал Рахул Патил.
Вы можете использовать ldconfig -v | grep libraryname , также команда имеет опцию command -V или binaryfile —version
также вы можете использовать yum или aptitude на основе дистрибутива, который вы используете например.
в RHEL5 /CENTOS5 /Fedora вы можете использовать yum info packagename , или если он установлен, используйте rpm —version packagename
В Ubuntu Вы можете использовать aptitude show pkgname или dpkg —version pkgname
Для систем на базе Redhat выполните следующее:
Проверьте файл необходимых пакетов, убедитесь, что в именах файлов библиотеки нет имен путей. Если удалите их, значит, «/bin/lib/libx.so.1» изменится на «libx.so.1»
Узнайте, какой пакет содержит библиотеку
Или поместите это в скрипт или запустите из строки cmd:
Затем создайте следующий сценарий или запустите из строки cmd:
Вы закончили, запустите свою программу. Если при запуске возникают ошибки GUI. Скопируйте их и если они являются ссылками на библиотеки, найдите пакеты для них и установите их таким же образом.
Источник
unixforum.org
Форум для пользователей UNIX-подобных систем
- Темы без ответов
- Активные темы
- Поиск
- Статус форума
Общий порядок компиляции + как узнать версию библиотеки
Общий порядок компиляции + как узнать версию библиотеки
Сообщение bdimych » 11.02.2007 23:40
MOPSLinux 5 = Slackware 11
Я начинающий но уже продвинутый. Не могу сообразить принципы стандартной сборки приложения linux.
Вопросы возникли при попытках сборки vlc player. Это здоровенный можно сказать мультимедийный фрэймворк. Чтобы его собрать нужно
30 других пакетов которые и между собой тоже связаны. Там есть автоматизация сборки всех нужных пакетов, но с первого раза не получилось. Процесс несколько раз стопорился и в каждом случае приходилось вручную разбираться с несобирающимся пакетом. И когда он наконец таки собрался, заработал тоже не сразу. Пришлось пересобирать несколько раз а на каждую пересборку не меньше 40 минут уходило. Я злился!
Не могу сообразить порядок вообще т.е.
1. autotools делают файлы Makefile и configure
2. gcc и g++ собирает файлы «o» из файлов c/cpp + h/hpp
3. . собирает из нескольких «o» файл «a»
4. . из «a» делает файл «so»
Статическая сборка — это включение кусков кода из одного «o» в другой ?
Где определяется что программа будет не статической а использовать «so» и какие ? Т.е. например пакет ffmpeg у меня уже есть в /usr/local. Сборочный скрипт vlc качает ffmpeg в свой подкаталог и как быть уверенным что при сборке будет использоваться именно скаченная версия
Что делает ldconfig? Т.е. не может ли он тоже повлиять на то какая версия ffmpeg будет использоваться. Ведь ldconfig при каждой загрузке запускается и что то связывает.
Как узнать версию файла «a» или «so» и вообще понятие версия библиотеки в линуксе что означает. Я виндузятник поэтому о версии представление такое — «правой кнопкой — свойства файла». Пробовал readelf но он выдает нечто большое которое явно не совпадает просто с цифрой в имени файла после «so». Эта цифра как я понимаю и есть версия? Но внутри файла версии нет что ли ? А у файлов «a» где тогда версия ?
я примерно знаю что надо читать: elf + libtool + ld + ldconfig + флаги -L -I -l но как говорил Киса Воробьянинов хочется чтобы побыстрее Если не трудно объясните пожалуйста в двух словах.
Источник
Linux посмотреть версию библиотеки
Здравствуйте, opener, Вы писали:
O>Знатоки, подскажите, какой командой можно получить информацию о версии установленной в системе .so-шки?
Посмотреть, какому пакету принадлежит эта .so-шка и посмотреть версию пакета. Какими командами — зависит от дистрибутива.
Еще .so-шки зачастую являются симлинками на файлы, по имени совпадающими с .so-шкой, но с версией в конце.
| От: | opener |
Дата: | 23.05.13 12:58 | |
Оценка: |
Здравствуйте, ДимДимыч, Вы писали:
ДД>Здравствуйте, opener, Вы писали:
O>>Знатоки, подскажите, какой командой можно получить информацию о версии установленной в системе .so-шки?
ДД>Посмотреть, какому пакету принадлежит эта .so-шка и посмотреть версию пакета.
Ну вот лежит у меня в системе libxml2.so
Как узнать, из какого пакета она была установлена?
ДД>Какими командами — зависит от дистрибутива.
| От: | ДимДимыч | http://klug.org.ua |
Дата: | 23.05.13 13:11 | ||
Оценка: | 2 (1) |
Здравствуйте, opener, Вы писали:
O>Ну вот лежит у меня в системе libxml2.so
O>Как узнать, из какого пакета она была установлена?
O>Linux RedHat
Если это файл, а не симлинк, то
Если симлинк, то глянуть, на какой файл он смотрит. В моей системе, например:
| От: | zaufi |
Дата: | 23.05.13 15:49 | |
Оценка: |
Здравствуйте, ДимДимыч, Вы писали:
ДД>Здравствуйте, opener, Вы писали:
O>>Ну вот лежит у меня в системе libxml2.so
O>>Как узнать, из какого пакета она была установлена?
O>>Linux RedHat
ДД>Если это файл, а не симлинк, то
ДД>
ДД>Если симлинк, то глянуть, на какой файл он смотрит. В моей системе, например:
ДД>
ДД>Версия 2.9.1.
стоит однако заметить, что не всегда эти циферки значат «версия пакета». не берусь сказать насколько «далеко» не всегда, в частности идеология используемая libtool’ом приводит к тому, что эти циферки практически никак не связаны с версией пакета (и даже API библы), а только лишь с количеством «интерфейсов» (и изменений) предоставляемых библой (т.е. ABI, которое не равно версии API). почитать можно здесь и здесь. и, насколько я помню, эта схема уходит корнями в солярис — просто была чуть допилена.
т.е. вообще говоря, пакеты которые устанавливают свои .soшки с циферками совпадающими с версией пакета, фактически не корректно используют правила версионирования .soшек. (и маинтэйнеров надо бить по рукам)
Источник
ИТ База знаний
Курс по Asterisk
Полезно
— Узнать IP — адрес компьютера в интернете
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Калькулятор инсталляции IP — АТС Asterisk
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Управление библиотеками в Linux
Когда библиотекарь — пингвин
4 минуты чтения
В данной статье мы посмотрим, что такое статические и динамические библиотеки. Местоположение библиотек по умолчанию. Определение используемых библиотек. Загрузка библиотек.
Онлайн курс по Linux
Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps
Библиотеки это набор функций, которые могут использоваться в различных программах. Библиотеки могут быть статические (библиотека привязывается к определенной программе или софт содержит данную библиотеку в своем теле.) и динамическими (библиотеки грузятся в оперативную память и используются). Плюсы первого варианта нет проблемы совместимости, т. к. софт уже в себе содержит библиотеку, библиотека всегда с собой. Но при этом программы становятся большие по размеры и т.к каждая может загружать свои библиотеки, а иногда и одинаковые. Второй вариант значительно лучше, сами программы по своему размеру меньше. Библиотека загружается один раз в оперативку. И следующая программа, которой необходимы такие же функции, берет и использует эти данные.
По умолчанию библиотеки в Linux находятся в двух папках. Это корневая папка /lib в ней находятся библиотеки, которые используют программы, расположенные в корневой папке /bin.
И есть вторая папка /usr/lib. В ней находятся библиотеки, которые используют программы расположенные /usr/bin. Пути к библиотекам указаны файле /etc/ld.so.conf. Данный файл можно просмотреть стандартным способом, через утилиту cat.
Видим, что написано включить все библиотеки, которые расположены по пути, указанном в файле. Те которые оканчиваются на .conf. Он просто включает в себя все настройки, которые находятся в конфигурационных файлах, в данной директории. Переходим в данную директорию.
В данной директории мы можем видеть 2 файла конфигурации, в зависимости от версии и наполнения операционной системы их может быть и больше. Ну и соответственно в конфигурационных файлах находятся пути к директориям, где лежат необходимые для работы библиотеки. Если мы ставим какое, то свое программное обеспечение, которому необходимы дополнительные библиотеки, не идущие в составе дистрибутива linux, то в данной директории может создаться свой конфигурационный файл. Например: если мы используем систему виртуализации VMware, то к каждой VM устанавливаем VMware tools то данное программное обеспечение создаст свой конфигурационный файл с путями для своих библиотек.
Переходим в директорию cd /etc/ и отсортируем так, чтобы в результатах все, что содержит ld.
Видим 3 основных конфигурационных файла. ld.so.conf — это файл конфигурации в котором написано откуда брать дополнительные библиотеки. Директория ls.so.conf.d в которой находятся дополнительные конфигурационные файлы и ld.so.cache это кэш библиотек. Он у нас выстраивается каждый раз для того, чтобы программы при необходимости при запросе библиотек не копались в файлах, а сразу брали из загруженного в оперативную память кэша. Т.е. если мы вносим какие-то изменения в файл конфигурации, добавляем какие-то конфигурационные файлы нам необходимо обновить этот кэш. Кэш обновляется командой ldconfig. Этого, собственно, достаточно, чтобы прогрузить все библиотеки в кэш.
Давайте посмотрим, как, определить какими библиотеками пользуется какая программа.
Для этого мы будем использовать команду ldd и путь к бинарному файлу. Например: Программа ls которая используется для вывода списка файлов в каталоге. Она находится в каталоге /bin/ls.
В результате получим мы следующее:
Мы видим, какие so использует данная программа и соответственно ссылки на них, где они расположены, собственно, so — это наши библиотеки в данном случае.
Возможно добавление библиотек вручную, это может потребоваться если мы ставим совершенно стороннее программное обеспечение, которое очень трудно взаимодействует с Linux или устаревшее. Т.е. которое само не может создать конфигурационный файл и разнести библиотеки в системные директории Linux. Если мы хотим сделать это вручную, тогда нам необходим тот самый файл /etc/ld.so.conf. В данный файл мы можем дописать путь к файлу конфигурации библиотек тех, которые нам нужны. Либо есть более легкий вариант с использованием переменной export LD_LIBRARY_PATH и указать путь к тем особенным библиотекам, которые будет использовать наша «особенная» программа. Обычно все стороннее программное обеспечение устанавливается в папку /opt. Итоговый вариант будет выглядеть как: export LD_LIBRARY_PATH=/opt/soft/lib и когда пройдет экспорт, у нас попробует погрузится из этого пути библиотека, но перед этим необходимо не забыть сделать ldconfig.
Онлайн курс по Linux
Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps
Источник