GCC / ELF - da dove viene il mio simbolo?
Domanda
Esiste un eseguibile collegato dinamicamente al numero di oggetti condivisi. Come posso determinare a quale di essi appartiene un simbolo (importato in eseguibile)?
Se ci sono più di una possibilità, potrei silmulare ld e vedere da dove viene presa?
Soluzione
Dai un'occhiata a nm (1) , objdump (1) e elfdump (1) .
Altri suggerimenti
Oltre a quelli citati da Charlie, " ldd " ; potrebbe fare qualcosa di quello che stai cercando.
Se riesci a ricollegare l'eseguibile, il modo più semplice per scoprire da dove provengono riferimenti e definizioni è usare il flag ld
-y
. Ad esempio:
$ cat t.c
int main() { printf("Hello\n"); return 0; }
$ gcc t.c -Wl,-yprintf
/lib/libc.so.6: definition of printf
Se non riesci a ricollegare l'eseguibile, esegui ldd
, quindi esegui 'nm -D'
su tutte le librerie elencate in ordine e grep
per il simbolo che ti interessa.
$LD_DEBUG=bindings my_program
Ciò stamperebbe tutti i collegamenti dei simboli sulla console.