2012-08-14 8 views
5

Durante la vinculación dinámica aparece una referencia de función indefinida extraña. Sé el nombre de la biblioteca que debe contener esta función. ¿Hay algún comando de Linux para asegurarse de que la función ya exista en la biblioteca (archivo .a)?Comprobación de la existencia de una función en una biblioteca en Linux

+2

Pruebe 'nm ', si su símbolo tiene el prefijo 't' o' T' la lib lo tiene. – Rohan

+0

[autoconf] (http://www.gnu.org/software/autoconf/) lo hace al verificar la disponibilidad de la biblioteca con ['AC_CHECK_LIB'] (http://www.gnu.org/software/autoconf/manual /autoconf.html#Libraries) función. –

Respuesta

9

Usted debe ser capaz de utilizar nm (podría requerir el parámetro --demangle) para obtener una lista de todo dentro de la biblioteca , luego use grep para filtrar los resultados, por ej. busca \d T functionname\( o algo así.

+0

La biblioteca tiene el nombre de la función con el prefijo T. Pero el nombre de la función no es exactamente lo que espero. nm encuentra: '0000000000000310 T _Z15lmp_init_deviceiiiiidii' mientras busco lmp_init_device. ¿Se ignoraría el prefijo/sufijo durante la vinculación? – ahmad

+1

Agregue '--demangle' y debería eliminar los caracteres agregados (causados ​​por ser C++ en lugar de C). – Mario

1

Tenga una mirada a nm comando que se debe dar a la pieza de información que busca

Cuestiones relacionadas