Linux узнать версию файла

unixforum.org

Общий порядок компиляции + как узнать версию библиотеки

Общий порядок компиляции + как узнать версию библиотеки

Сообщение 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» где тогда версия ?

Читайте также:  Samp server on linux

я примерно знаю что надо читать: elf + libtool + ld + ldconfig + флаги -L -I -l но как говорил Киса Воробьянинов хочется чтобы побыстрее Если не трудно объясните пожалуйста в двух словах.

Источник

Просмотр информации о библиотеке Linux / исполняемой версии

В Windows EXE и DLL имеют информацию о версии, включая, по крайней мере, следующие поля:

  1. версия файла
  2. версия продукта
  3. внутреннее имя
  4. наименование товара
  5. авторское право

В Linux Library / Исполняемый файл:

  • Какие поля присутствуют?
  • Как просмотреть такую ​​информацию?
  • Какие инструменты / библиотеки читать?

ldconfig нужен рут? Как насчет того, чтобы проверить определенный файл libxxx.so и не хотите запускать exe с —version (может произойти сбой)

root не нужен, так как / sbin / path не задан в обычной пользовательской среде, вы можете выполнить его, используя абсолютный путь, например. /sbin/ldconfig -p

Информация о версии явно не сохраняется в файле ELF . У вас есть название библиотеки, в soname которую входит основная версия. Полная версия обычно хранится как часть имени файла библиотеки.

Если у вас есть, скажем libtest.so , библиотека , то у вас обычно есть:

  • libtest.so.1.0.1 — сам файл библиотеки, содержащий полную версию
  • libtest.so.1 — Ссылка на libtest.so.1.0.1 , имеющая то же имя, что и soname
  • libtest.so — Симлинк, libtest.so.1 используемый для ссылки.

В файле библиотеки libtest.so.1.0.1 будет SONAME динамическая секция, которая будет называть эту библиотеку вызываемой libtest.so.1 . Когда вы связываете программу с этой библиотекой, связанная программа будет хранить входящую soname библиотеку NEEDED в динамическом разделе.

Если вы хотите проверить, что именно находится в ELF-файле, вы можете попробовать запустить:

где elffile может быть библиотека исполняемого файла.

Если вы просто хотите получить версию библиотеки, вы можете поиграть с:

readelf -d /path/to/library.so |grep SONAME 

AFAIK, такой информации нет (по крайней мере, по умолчанию) в исполняемых файлах.

Или вы можете положиться на саму программу или свою систему упаковки, как писал Рахул Патил.

хорошая информация, это ново для меня никогда не использовал readelf, если вы не возражаете, могу я спросить вас, где и зачем использовать readelf

Readelf (и аналогичные инструменты) полезен, когда вы хотите заглянуть внутрь эльфийского файла :). Я использую его в основном при программировании для поиска символов в библиотеках (когда что-то не работает) или когда есть проблемы с библиотекой. ( man readelf )

Читайте также:  What is text processing in linux

Вы можете использовать ldconfig -v | grep libraryname , также команда имеет опцию command -V или binaryfile —version

test@ubuntukrb12:~# ls --version ls (GNU coreutils) 8.13 Copyright (C) 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later . This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. 

также вы можете использовать yum или aptitude в зависимости от используемого вами дистрибутива, например.

в RHEL5 / CENTOS5 / Fedora вы можете использовать yum info packagename или, если он установлен, используйте rpm —version packagename

 [root@ldap1 ~]# yum info bind97 Loaded plugins: downloadonly, fastestmirror, security Loading mirror speeds from cached hostfile * base: mirrors.sin3.sg.voxel.net * epel: mirror.imt-systems.com * extras: mirrors.sin3.sg.voxel.net * updates: mirrors.sin3.sg.voxel.net Installed Packages Name : bind97 Arch : i386 Epoch : 32 Version : 9.7.0 Release : 10.P2.el5_8.4 Size : 6.3 M Repo : installed Summary : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server URL : http://www.isc.org/products/BIND/ License : ISC Description: BIND (Berkeley Internet Name Domain) is an implementation of the DNS : (Domain Name System) protocols. BIND includes a DNS server (named), : which resolves host names to IP addresses; a resolver library : (routines for applications to use when interfacing with DNS); and : tools for verifying that the DNS server is operating properly. 

В Ubuntu Вы можете использовать aptitude show pkgname или dpkg —version pkgname

root@ubuntukrb12:~# aptitude show bind9utils Package: bind9utils State: installed Automatically installed: yes Version: 1:9.8.1.dfsg.P1-4ubuntu0.4 Priority: optional Section: net Maintainer: Ubuntu Developers Architecture: amd64 Uncompressed Size: 306 k Depends: libbind9-80, libc6 (>= 2.14), libdns81, libisc83, libisccc80, libisccfg82 Conflicts: bind9utils Replaces: bind9 ( 

Для rpm , я думаю , что вы хотите rpm --query pkgname перечислить строку версии ( rpm --version напечатает версию rpm себя, то же самое может быть верно для dpkg )

Для систем на базе Redhat сделайте это:

ldd [file you want to run] | > needed-packages 

Проверьте файл Нужных пакетов, убедитесь, что в именах файлов библиотеки отсутствуют пути. Если это так, удалите их, поэтому «/bin/lib/libx.so.1» измените на «libx.so.1»

Узнайте, какой пакет содержит библиотеку

Или поместите это в скрипт или запустите из строки cmd:

for lib in `cat libs.txt`; do yum -y provides $lib | head -2 | grep " : " >> packages.list done 

Затем создайте следующий скрипт или запустите из строки cmd:

for package in `cat packages.list | awk '< print $1 >'`; do yum -y install $package done 

Вы сделали, запустите вашу программу. Если вы получаете ошибки GUI при запуске. Скопируйте их, и, если они являются ссылками на библиотеки, найдите пакеты для них и установите таким же образом.

Источник

Как узнать версию программы в Linux

book24 не заставляйте меня думать

sed (GNU sed) 4.7 Packaged by Debian Copyright (C) 2018 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later . This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by Jay Fenlason, Tom Lord, Ken Pizzini, Paolo Bonzini, Jim Meyering, and Assaf Gordon. GNU sed home page: . General help using GNU software: . E-mail bug reports to: .

В Debian , Ubuntu и других производных Debian можно выполнить команду

Например, чтобы узнать версию sed нужно выполнить

Package: sed Essential: yes Priority: required Section: utils Installed-Size: 336 Origin: Ubuntu Maintainer: Ubuntu Developers Bugs: https://bugs.launchpad.net/ubuntu/+filebug Architecture: amd64 Multi-Arch: foreign Version: 4.7-1 Pre-Depends: libacl1 (>= 2.2.51-8), libc6 (>= 2.14), libselinux1 (>= 1.32) Filename: pool/main/s/sed/sed_4.7-1_amd64.deb Size: 189668 MD5sum: 2e2c9a0370c20a2a1921572f250db43e Description: GNU stream editor for filtering/transforming text Original-Maintainer: Clint Adams SHA1: a8106de20fa00fc7f97a45d18ec411512cc64293 SHA256: a5428ddec609149eb6086cec20bf14a0300972a191eb0cc010e7f1c7f17186f4 Homepage: https://www.gnu.org/software/sed/ Task: minimal Description-md5: 2ed71305ee7a49ce4438c58140980d2f

Команда dpkg -p, впрочем как и флаги --version, -V работает не со всеми программами

Например, если вы выполните

Скорее всего получите сообщение

dpkg-query: package 'virtualbox' is not available

Команда virtualbox --version просто запустит Virtualbox

Чтобы определить версию Virtualbox выполните

Oracle VM VirtualBox VM Selector v6.1.10_Ubuntu (C) 2005-2020 Oracle Corporation All rights reserved. No special options. If you are looking for --startvm and related options, you need to use VirtualBoxVM.

  • Поиск по сайту
  • aofeed - Telegram канал чтобы следить за выходом новых статей
  • aofeedchat - задать вопрос в Телеграм-группе

Источник

Оцените статью
Adblock
detector