¿Cómo encuentro a qué versión de libc se vincula mi aplicación?

14

Al construir una aplicación usando g ++, no estoy pasando explícitamente la biblioteca libc como una biblioteca para vincularla de la misma manera que lo haría para otras bibliotecas (como pasar, -lpthreadpor ejemplo). Sé que libc tiene el nombre, libc.so.6pero sé que esto no es en realidad una biblioteca, sino algo así como un puntero a otra versión de libc (como libc-2.15.so). Mi pregunta es si tenía varias versiones de libc en mi computadora, ¿cómo puedo saber cuál está realmente vinculado a través de libc.so.6.

matemático1975
fuente

Respuestas:

16

ldddebe ser la herramienta de tu elección. Eso te da la biblioteca compartida realmente vinculada.

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

En el caso de .sola biblioteca, simplemente puede ejecutar el archivo y se le indicará la versión de la biblioteca.

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.
confundir
fuente
Sí sabía sobre ldd, aunque no sabía que solo podía ejecutar una biblioteca, gracias. Desafortunadamente, mi resultado de ejecutar la biblioteca no muestra la versión ...
mathematician1975
No tenga en cuenta que estaba siendo un idiota, ¡gracias por la respuesta!
matemático1975
1
Gracias por la respuesta. ¿Puede proporcionar alguna información de lo que me dice la salida ldd? ¿Significa que testendianrequiere GLIBC_2.3 o GLIBC_2.2.5?
bonanza
Estoy razonablemente seguro, significa que el programa necesita GLIBC 2.2.5 y el cargador de la biblioteca ld-linux-x86-64 se compiló con GLIBC_2.3. Entonces ambos de alguna manera. Pero tómalo con un grano de sal, ya que no encontré una referencia.
con-f-use
Funciona muy bien para ejecutables dinámicos, ¡pero no tanto para los estáticos! (Tengo que probar lo que estoy ligado con becauses de una advertencia gcc: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking)
jpaugh