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.1usado 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.