2010-06-30 9 views

risposta

4

È possibile utilizzare lo strumento nm della riga di comando per elencare i simboli esportati binari:

~/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 

Secondo the manual, 't' significa che il simbolo è nella (testo) segmento di codice, e mezzi maiuscole è pubblico.

Se si dispone di un simbolo che si sta cercando, è possibile utilizzare nm per rendere i simboli esportati da una libreria accessibile ad es. grep:

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

Questa riga di comando è uno schizzo non verificato, ma dovrebbe mostrare il concetto.

+0

Non trova i nomi di funzione assegnati alla libreria, piuttosto che la libreria con il nome della funzione? –

+0

@Pete: vero, ma poiché esporta le informazioni, può essere utilizzato per eseguire il comando grep su file di libreria. – unwind

+0

Grazie .. Ho capito .. – Dinesh

1

Se fa parte dell'API standard C, eseguire semplicemente man, dovrebbe indicare chiaramente dove è definita la funzione.

+0

E se non lo è, la documentazione della biblioteca indica presumibilmente come collegarsi ad essa. – nos

1

Se si desidera scoprire la libreria in modo non programmatico, è possibile trovare utile LSB Navigator. Inserire la funzione nella casella di ricerca e controllare la libreria nella riga con lo "stato" verde.

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

Questa sarà la libreria "convenzionale" che contiene la funzione (nell'esempio descritto sopra, librt è la libreria corretta per mq_unlink, quindi si collega con -lrt). Basta collegarsi con quella libreria e funzionerà praticamente su tutti i sistemi Linux.

Nota: ero uno degli sviluppatori dello strumento che consiglio.