Como você listar as funções disponíveis etc contidos em uma biblioteca compilada?
Pergunta
Como faço para determinar se existe uma função dentro de uma biblioteca ou lista as funções em uma biblioteca compilada?
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.