Como você listar as funções disponíveis etc contidos em uma biblioteca compilada?

StackOverflow https://stackoverflow.com/questions/392142

  •  23-08-2019
  •  | 
  •  

Pergunta

Como faço para determinar se existe uma função dentro de uma biblioteca ou lista as funções em uma biblioteca compilada?

Foi útil?

Solução

Você pode usar o comando nm para listar os símbolos na estática bibliotecas.

nm -g -C <libMylib.a>

Outras dicas

Para binários ELF, você pode usar readelf:

readelf -sW a.out | awk '$4 == "FUNC"' | c++filt

-s: Símbolos da lista -W: não cortar nomes muito tempo

O comando awk, então, filtrar todas as funções, e c ++ filt vai unmangle eles. Isso significa que ele irá convertê-los a partir de um esquema de nomeação interna, de modo que eles são exibidos em um formato legível. Ele produz nomes semelhantes a este (retirado lib Boost.Filesystem):

285: 0000bef0    91 FUNC    WEAK   DEFAULT   11 boost::exception::~exception()

Sem c ++ filt, o nome é exibido como _ZN5boost9exceptionD0Ev

Para ferramentas da Microsoft, "link /dump /symbols <filename>" vai lhe dar os detalhes. Há provavelmente outras maneiras (ou opções) para dar uma mais fácil de ler lista.

No Linux / Unix você pode usar objdump -T para listar os símbolos exportados contidos em um determinado objeto. No Windows há dumpbin (IIRC dumpbin /exports). Note-se que os nomes das funções C ++ são mutilados, a fim de permitir que sobrecargas.

EDIT: depois de ver de codelogic anwser me lembrei que objdump também entende -C para executar de-mangling.

usar este comando:

objdump -t "your-biblioteca"

Ele irá imprimir mais do que você quer - e não apenas nomes de função, mas a tabela de símbolo inteiro. Confira os diversos atributos dos símbolos tiver, e você será capaz de resolver as funções de variáveis ??e outras coisas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top