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 paralibtest.so.1.0.1
, com o mesmo nome quesoname
-
libtest.so
- Symlink paralibtest.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.