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.

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.

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.