Wie finde ich, auf welche Version von libc meine Anwendung verweist?

14

Wenn ich eine Anwendung mit g ++ erstelle, übergebe ich die libc-Bibliothek nicht explizit als Bibliothek, auf die ich verlinke, wie Sie es bei anderen Bibliotheken tun würden (wie -lpthreadzum Beispiel beim Übergeben ). Ich weiß, dass libc den Namen so hat, libc.so.6aber mir ist bewusst, dass dies eigentlich keine Bibliothek ist, sondern so etwas wie ein Zeiger auf eine andere Version von libc (wie libc-2.15.so). Meine Frage ist, ob ich mehrere Versionen von libc auf meinem Computer hatte, wie ich feststellen kann, mit welcher Version man tatsächlich über die verknüpft wird libc.so.6.

Mathematiker1975
quelle

Antworten:

16

lddsollte das Werkzeug Ihrer Wahl sein. Das gibt Ihnen die gemeinsam genutzte Bibliothek tatsächlich verknüpft.

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

Im Falle der libc können Sie einfach die .soDatei ausführen und die Bibliotheksversion erfahren.

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.
verwechseln
quelle
Ich wusste von ldd, wusste aber nicht, dass man eine Bibliothek betreiben kann - danke. Leider zeigt meine Ausgabe der Bibliothek nicht die Version ....
mathematician1975
Ignoriere, dass ich ein Idiot war - danke für die Antwort!
Mathematiker1975
1
Danke für die Antwort. Kannst du mir ein paar Informationen geben, was mir die ldd-Ausgabe sagt? Bedeutet das, dass testendianGLIBC_2.3 oder GLIBC_2.2.5 erforderlich ist?
Bonanza
Ich bin mir ziemlich sicher, dass das Programm GLIBC 2.2.5 benötigt und der Library Loader ld-linux-x86-64 mit GLIBC_2.3 erstellt wurde. Also beides in gewisser Weise. Aber nimm das mit einem Körnchen Salz, da ich keinen Hinweis gefunden habe.
Con-F-Use
Funktioniert hervorragend für dynamische ausführbare Dateien, aber weniger für statische! (Ich brauche zu testen , was ich die Verknüpfung gegen becauses einer gcc Warnung: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking)
jpaugh