2012-08-14 1 views
5

Durante il collegamento dinamico viene visualizzato un riferimento di funzione strano non definito. Conosco il nome della libreria che dovrebbe contenere questa funzione. Esiste un comando linux per assicurarsi che la funzione esista già nella libreria (.a file)?Controllo dell'esistenza di una funzione in una libreria in linux

+2

Prova 'nm ', se il tuo simbolo è preceduto da 't' o' T' la lib lo ha. – Rohan

+0

[autoconf] (http://www.gnu.org/software/autoconf/) esegue questa operazione quando si verifica la disponibilità della libreria con ['AC_CHECK_LIB'] (http://www.gnu.org/software/autoconf/manual /autoconf.html#Libraries). –

risposta

9

Si dovrebbe essere in grado di utilizzare nm (potrebbe richiedere il parametro --demangle) per ottenere una lista di tutto essere dentro la biblioteca , quindi utilizzare grep per filtrare i risultati, ad es cercare \d T functionname\( o qualcosa del genere.

+0

La libreria ha il nome di funzione prefissato con T. Ma il nome della funzione non è esattamente quello che mi aspetto. nm trova: '0000000000000310 T _Z15lmp_init_deviceiiiiidi' mentre sto cercando lmp_init_device. Potrebbe essere prefisso/suffisso ignorato durante il collegamento? – ahmad

+1

Aggiungi '--demangle' e dovrebbe rimuovere i caratteri aggiunti (causati dal fatto che è C + + anziché semplice C). – Mario

1

Date un'occhiata a nm comando che dovrebbe dare il pezzo di informazioni che state cercando per