¿Cómo hacer una lista de las funciones disponibles, etc. contenidas dentro de una biblioteca compilada?
Pregunta
¿Cómo se determina si existe una función dentro de una biblioteca, o una lista de las funciones de una biblioteca compilada?
Solución
Puede utilizar el nm comando para listar los símbolos en estático bibliotecas.
nm -g -C <libMylib.a>
Otros consejos
Para binarios ELF, puede utilizar readelf:
readelf -sW a.out | awk '$4 == "FUNC"' | c++filt
-s
: símbolos de lista
-W
: no corte nombres demasiado largos
El comando awk filtrará entonces todas las funciones, y c ++ filt se unmangle ellos. Eso significa que los convertirá a partir de un esquema de denominación interna modo que se muestren en forma legible por humanos. Se da salida a nombres similares a este (tomado de lib boost.filesystem):
285: 0000bef0 91 FUNC WEAK DEFAULT 11 boost::exception::~exception()
Sin filt c ++, el nombre se muestra como _ZN5boost9exceptionD0Ev
Para las herramientas de Microsoft, "link /dump /symbols <filename>
" le dará los detalles morbosos. Probablemente hay otras maneras (u opciones) para dar una lista más fácil de leer.
En Linux / Unix puede utilizar objdump -T
para enumerar los símbolos exportados contenidas en un objeto dado. En Windows hay dumpbin
(dumpbin /exports
IIRC). Tenga en cuenta que C ++ nombres de función se truncan con el fin de permitir que las sobrecargas.
EDIT: después de ver codelogic anwser recordé que objdump también entiende -C realizar de-mangling.
utilizar este comando:
objdump -t "tu-biblioteca"
Se imprimirá más de lo que quiere - no sólo funcionar nombres, sino a toda la tabla de símbolos. Compruebe los diversos atributos de los símbolos que obtenga, y usted será capaz de resolver las funciones de las variables y otras cosas.