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.

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.

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.