Exibindo informações sobre a versão da biblioteca / executável do Linux

30

No Windows, EXE e DLL têm informações de versão, incluindo pelo menos os seguintes campos:

  1. versão do arquivo
  2. versão do produto
  3. nome interno
  4. nome do produto
  5. direitos autorais

Na biblioteca / executável do Linux:

  • Quais campos estão presentes?
  • Como visualizar essas informações?
  • Quais ferramentas / bibliotecas você deve ler?
por linquize 19.12.2012 / 07:32

3 respostas

29

As informações da versão não são armazenadas explicitamente em um arquivo ELF. O que você tem aí é o nome da biblioteca, o soname , que inclui a versão principal. A versão completa é normalmente armazenada como parte do nome do arquivo da biblioteca.

Se você tiver uma biblioteca, digamos libtest.so , normalmente você tem:

  • libtest.so.1.0.1 - O próprio arquivo da biblioteca, contendo a versão completa
  • libtest.so.1 - Symlink para libtest.so.1.0.1 , com o mesmo nome que soname
  • libtest.so - Symlink para libtest.so.1 usado para vincular.

No arquivo de biblioteca libtest.so.1.0.1 , haverá uma entrada chamada SONAME na seção dinâmica, que dirá que essa biblioteca é chamada libtest.so.1 . Quando você vincula um programa a essa biblioteca, o programa vinculado armazenará o soname da biblioteca sob NEEDED entry na seção dinâmica.

Se você quiser verificar exatamente o que é o arquivo ELF, tente executar:

readelf -a -W elffile

em que elffile pode ser uma biblioteca de um executável.

Se você quer simplesmente obter a versão da biblioteca, pode brincar com:

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

AFAIK, não existe essa informação (pelo menos não por padrão) em arquivos executáveis.

Ou você pode confiar no próprio programa ou no seu sistema de empacotamento, como escreveu Rahul Patil.

    
por 19.12.2012 / 08:32
12

Você pode usar ldconfig -v | grep libraryname , também o comando tem a opção command -V ou binaryfile --version

exemplo:

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

você também pode usar o yum ou o aptitude baseado na distro que você está usando por exemplo.

no RHEL5 / CENTOS5 / Fedora você pode usar yum info packagename ou, se estiver instalado, usar 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.

No Ubuntu Você pode usar aptitude show pkgname ou 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 <[email protected]>
Architecture: amd64
Uncompressed Size: 306 k
Depends: libbind9-80, libc6 (>= 2.14), libdns81, libisc83, libisccc80, libisccfg82
Conflicts: bind9utils
Replaces: bind9 (<= 1:9.5.0~b2-1), bind9 (<= 1:9.5.0~b2-1)
Description: Utilities for BIND
 This package provides various utilities that are useful for maintaining a working BIND installation.
    
por 19.12.2012 / 08:11
5

Para sistemas baseados em Redhat, faça isso:

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

Verifique o arquivo de pacotes necessários, verifique se não há nomes de caminho nos nomes de arquivos da biblioteca. Se assim for, remova-os, então "/bin/lib/libx.so.1" mude para "libx.so.1"

Descubra qual pacote contém a biblioteca

yum -y provides [lib name]

Ou coloque isso em um script ou execute a partir da linha cmd:

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

Em seguida, crie o seguinte script ou execute a partir da linha cmd:

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

Você terminou, execute seu programa. Se você receber erros de GUI durante a execução. Copie-os e, se forem referências de bibliotecas, encontre os pacotes para eles e instale-os da mesma maneira.

    
por 13.10.2014 / 20:40