2010-08-08 12 views
5

È noto che glibc (e, per quanto ne so, anche glibstd ++) utilizza il meccanismo di controllo delle versioni dei simboli. (Per i dettagli, consultare: How can I link to a specific glibc version.)Come determinare la versione di binario glibc (glibcxx) dipenderà da?

La domanda è come determinare le versioni esatte di GLIBC e GLIBCXX verrà scelto dal linker per i nomi da libc e libstdC++? Ad esempio, come ottenere qualcosa di simile:

time -> [email protected]_2_5 
... 
gethostbyname -> [email protected]_2_3 

Perché ne abbiamo bisogno? Mi sembra che possa essere utile se si desidera minimizzare le versioni richieste di glibc/libstdC++.

+0

IIrC dso-howto (http://www.akkadia.org/drepper/dsohowto.pdf) aveva una sezione sull'utilizzo di script di linker per questo. – ninjalj

risposta

9

Una cosa che puoi provare è eseguire objdump -T sul tuo binario.

Se si sta considerando il collegamento a versioni precedenti di simboli, tenere presente che queste versioni precedenti possono dipendere anche da strutture precedenti, diverse o altre definizioni. Per evitare ciò, compila e collega con file di intestazione e librerie più vecchi e corrispondenti.

+0

Grazie, Jilles. Funziona. Ancora una domanda, come ottenere la posizione nel codice da cui viene chiamato il simbolo dinamico? Voglio dire, ad esempio, se 'objdump -T' restituisce qualche voce, ad esempio GLIBCXX_3.4.9 *** Inserisci _ ***, come capire quali funzioni nelle fonti usano questo simbolo? – Shcheklein

+0

hmm, non conosco una soluzione migliore di eseguire objdump -t su tutti i file .o e controllare quali contengono riferimenti alla funzione. Sembra che questo possa essere fatto meglio in quanto il linker sa dove è stato utilizzato un simbolo non risolto. – jilles

+0

Ok, grazie. Comunque è un'altra domanda ... – Shcheklein

Problemi correlati