Comment puis-je trouver la version de libc à laquelle mon application renvoie?

14

Lors de la construction d'une application à l'aide de g ++, je ne passe pas explicitement la bibliothèque libc comme une bibliothèque à lier de la même manière que vous le feriez pour d'autres bibliothèques (comme passer -lpthreadpar exemple). Je sais que libc a le nom so libc.so.6mais je suis conscient que ce n'est pas réellement une bibliothèque mais quelque chose comme un pointeur vers une autre version de libc (comme libc-2.15.so). Ma question est de savoir si j'avais plusieurs versions de libc sur mon ordinateur, comment puis-je savoir laquelle est réellement liée via le libc.so.6.

mathématicien1975
la source

Réponses:

16

ldddevrait être l'outil de votre choix. Cela vous donne la bibliothèque partagée réellement liée.

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

Dans le cas de la libc, vous pouvez simplement exécuter le .sofichier et vous serez informé de la version de la bibliothèque.

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.
embrouiller
la source
Je connaissais ldd, je ne savais pas que vous pouviez simplement lancer une bibliothèque - merci. Malheureusement, ma sortie de l'exécution de la bibliothèque n'affiche pas la version ....
mathematician1975
Ignorez que j'étais un idiot - merci pour la réponse!
mathématicien1975
1
Merci d'avoir répondu. Pouvez-vous fournir des informations sur ce que la sortie ldd me dit? Cela signifie-t-il que testendiannécessite GLIBC_2.3 ou GLIBC_2.2.5?
bonanza
Je suis raisonnablement sûr, cela signifie que le programme a besoin de GLIBC 2.2.5 et que le chargeur de bibliothèque a ld-linux-x86-64 été construit avec GLIBC_2.3. Donc les deux en quelque sorte. Mais prenez cela avec un grain de sel, car je n'ai pas trouvé de référence.
con-f-use
Fonctionne très bien pour les exécutables dynamiques, mais pas tant pour les exécutables statiques! (Je dois tester ce que je suis contre becauses lien d'un avertissement de gcc: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking)
jpaugh