2010-06-30 14 views

Respuesta

4

Puede utilizar la herramienta nm de línea de comandos para enumerar los símbolos exportados en los binarios:

~/src> cat nm-test.c 

static int plus_four(int x) 
{ 
     return x + 4; 
} 

int sum_plus_four(int a, int b) 
{ 
     return plus_four(a + b); 
} 

int product_plus_four(int a, int b) 
{ 
     return plus_four(a * b); 
} 
~/src> gcc -c nm-test.c 
~/src> nm ./nm-test.o 
00000000 t plus_four 
00000023 T product_plus_four 
0000000b T sum_plus_four 

Según the manual, 't' significa que el símbolo está en el segmento de código (texto), y medios mayúsculas es público.

Si tiene un símbolo que está buscando, puede usar nm para hacer que los símbolos exportados por una biblioteca sean accesibles, p. Ej. grep:

$ find -name lib*.a /example/library/path | xargs nm | grep -E "T $SYMBOL_TO_FIND" 

Esta línea de comandos es un boceto no probado, pero debe mostrar el concepto.

+0

¿No encuentra los nombres de las funciones dadas a la biblioteca, en lugar de la biblioteca dado el nombre de la función? –

+0

@ Pete: Es cierto, pero como exporta la información, se puede usar para grep sobre los archivos de la biblioteca. – unwind

+0

Gracias ... Lo tengo .. – Dinesh

1

Si es parte de la API estándar C y ejecuta man, debe indicar claramente dónde se define la función.

+0

Y si no lo es, la documentación de la biblioteca presumiblemente indica cómo enlazarla. – nos

1

Si desea conocer la biblioteca de forma no programática, puede encontrar LSB Navigator útil. Ingrese la función en el cuadro de búsqueda y verifique la biblioteca en la línea con el "estado" verde.

http://coldattic.info/pic/165509391387.png

Esta será la biblioteca "convencional" que contiene la función (en el ejemplo representado anteriormente, librt es la biblioteca correcta para mq_unlink, por lo que se vincula con -lrt). Simplemente enlace con esa biblioteca, y funcionará en prácticamente todos los sistemas Linux.

Nota: Yo era uno de los desarrolladores de la herramienta que recomiendo.

Cuestiones relacionadas