
Al explorar el binario de C++, encuentro que libstdc++.so.6
está vinculado dyn a libm.so.6
y libc.so.6
:
$ ldd /lib/x86_64-linux-gnu/libstdc++.so.6
linux-vdso.so.1 (0x00007ffcb737b000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd3b2295000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd3b1c00000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd3b2396000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd3b2275000)
Mis preguntas son:
¿Qué
6
significa en el nombre? Originalmente pensé que era la versión de glibc, pero la versión es2.35
, lo cual no es relevante para6
.$ strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC_2.3 GLIBC_2.3 ... GLIBC_2.35
¿Por qué el sufijo es
6
tan popular?¿Hay un cronograma de cuándo
libc.so.7
se lanzará?
Respuesta1
El sufijo 6 se utiliza por razones históricas, detalladas enman libc
en Linux. Básicamente, se utilizó una bifurcación de la biblioteca GNU C en Linux; esto lanzó las versiones principales 2 a 5. La versión 5 usó ELF y se publicó con una biblioteca compartida con el nombre de libc.so.5
. Cuando se lanzó la versión 2 de la biblioteca GNU C en Linux, utilizó el nombre de biblioteca compartida libc.so.6
para evitar confusiones con bibliotecas anteriores.
Las bibliotecas relacionadas utilizan el mismo sufijo. Algunas arquitecturas utilizan un sufijo ligeramente diferente; por ejemplo, la biblioteca GNU C en Alpha e Itanium es libc.so.6.1
.
La biblioteca GNU C tiene una sólida historia de compatibilidad con versiones anteriores y utiliza muchos mecanismos diferentes para admitir la introducción de cambios significativos sin romper archivos binarios antiguos (incluidos los símbolos versionados). Un nuevo soname ( libc.so.7
) solo se usaría si fuera absolutamente necesario un cambio importante que no pudiera mitigarse, por lo que es poco probable que veamos uno pronto.
Respuesta2
Es el ABI (Interfaz binaria de la aplicación) versión.
Solo se incrementa cuando se realiza un cambio importante, lo que ahora se evita enfáticamente libc
, por lo que la mayoría de las distribuciones han estado activas libc.so.6
durante algún tiempo.
En general, permite que existan múltiples versiones incompatibles de una biblioteca en un sistema al mismo tiempo, admitiendo diferentes aplicaciones creadas para las diferentes versiones.
Por ejemplo, Ubuntu 18.04 proporcionó libcurl.so.3
(a través del paquete libcurl3
) y libcurl.so.4
(a través del paquete libcurl4
), ambos creados a partir de la versión 7.58.0 de cURL.