
Ao explorar o binário C++, descobri que ele libstdc++.so.6
está vinculado a libm.so.6
e 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)
Minhas perguntas são:
O que
6
significa no nome? Originalmente pensei que fosse a versão do glibc, mas a versão é2.35
, o que não é relevante para6
.$ strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC_2.3 GLIBC_2.3 ... GLIBC_2.35
Por que o sufixo é
6
tão popular?Existe uma programação de quando
libc.so.7
será lançado?
Responder1
O sufixo 6 é usado por razões históricas, detalhadas emman libc
no Linux. Essencialmente, um fork da biblioteca GNU C foi usado no Linux; este lançou as versões principais 2 a 5. A versão 5 usou ELF e foi publicada com uma biblioteca compartilhada soname de libc.so.5
. Quando a versão 2 da biblioteca GNU C foi lançada no Linux, ela usou a biblioteca compartilhada soname libc.so.6
para evitar confusão com bibliotecas anteriores.
Bibliotecas relacionadas usam o mesmo sufixo. Algumas arquiteturas usam um sufixo ligeiramente diferente; por exemplo, a biblioteca GNU C em Alpha e Itanium é libc.so.6.1
.
A biblioteca GNU C tem um forte histórico de compatibilidade com versões anteriores e usa muitos mecanismos diferentes para suportar a introdução de mudanças significativas sem quebrar binários antigos (incluindo símbolos versionados). Um novo soname ( libc.so.7
) só seria usado se uma alteração significativa que não pudesse ser mitigada fosse absolutamente necessária, então é improvável que vejamos uma em breve.
Responder2
É o ABI (Interface binária do aplicativo) versão.
Ele só é incrementado quando uma alteração significativa é feita, o que agora é fortemente evitado para libc
, portanto, a maioria das distribuições já está ativa libc.so.6
há algum tempo.
Em geral, permite que múltiplas versões incompatíveis de uma biblioteca existam em um sistema ao mesmo tempo, suportando diferentes aplicações que foram construídas para diferentes versões.
Por exemplo, o Ubuntu 18.04 forneceu libcurl.so.3
(via package libcurl3
) e libcurl.so.4
(via package libcurl4
), ambos construídos a partir do cURL versão 7.58.0.