Come trovo a quale versione di libc si collega la mia applicazione?


14

Quando costruisco un'applicazione usando g ++, non sto esplicitamente passando la libreria libc come libreria a cui collegarmi come faresti per altre librerie (come passare -lpthreadad esempio). So che libc ha il nome, libc.so.6ma sono consapevole che questa non è in realtà una libreria ma qualcosa di simile a un puntatore a un'altra versione di libc (come libc-2.15.so). La mia domanda è se ho avuto più versioni di libc sul mio computer, come posso sapere a quale effettivamente si collega tramite libc.so.6.

Risposte:


16

ldddovrebbe essere lo strumento che preferisci. Questo ti dà la libreria condivisa effettivamente collegata.

confus@confusion:~/misc/test$ ldd -r -v testendian
    linux-vdso.so.1 =>  (0x00007fffbcfff000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1a5a4c5000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f1a5a8a5000)

    Version information:
    ./testendian:
        libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
    /lib/x86_64-linux-gnu/libc.so.6:
        ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
        ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2

In caso di libc puoi semplicemente eseguire il .sofile e ti verrà comunicato la versione della libreria.

confus@confusion:~/misc/test$ /lib/x86_64-linux-gnu/libc.so.6 
GNU C Library (Ubuntu EGLIBC 2.15-0ubuntu10) stable release version 2.15, by Roland McGrath et al.

Sapevo di ldd, non sapevo che avresti potuto semplicemente gestire una biblioteca - grazie. Sfortunatamente il mio output dall'esecuzione della libreria non mostra la versione ....
matematic1975

Non tenere conto del fatto che ero un idiota - grazie per la risposta!
matematico,

1
Grazie per la risposta. Potete fornire alcune informazioni su cosa mi dice l'output ldd? Significa che testendianrichiede GLIBC_2.3 o GLIBC_2.2.5?
Bonanza,

Sono ragionevolmente sicuro, significa che il programma necessita di GLIBC 2.2.5 e che il caricatore di librerie è ld-linux-x86-64 stato creato con GLIBC_2.3. Quindi entrambi in un certo senso. Ma prendilo con un granello di sale, poiché non ho trovato un riferimento.
con-f-use il

Funziona alla grande per eseguibili dinamici, ma non tanto per quelli statici! (Ho bisogno di testare quello che sto collegando contro becauses di un avvertimento gcc: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking)
jpaugh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.