Suponha que eu tenha um programa compilado vinculado a libc.so.6 em um sistema (por exemplo, Ubuntu x64). Se eu levar este binário para outro sistema que tenha a mesma versão libc 6 (por exemplo, Fedora x64), parece funcionar bem.
Minha pergunta é, é mais ou menos um contrato que a ABI seja estável desde que as versões so sejam idênticas?
Não, não é necessário que as bibliotecas compartilhadas sejam compatíveis com a ABI. Acho que é uma expectativa razoável, mas quebras de ABI acontecem e você não pode confiar cegamente na compatibilidade de ABI.
Um exemplo seria
libstdc++
. No Ubuntu 16.04 (com GCC 5) e CentOS 7 (com GCC 4.8), os respectivosso
s caem em lados opostos de uma quebra de ABI . O software compilado no Ubuntu 16.04 com C++, mas sem_GLIBCXX_USE_CXX11_ABI
conjunto, não funcionaria no CentOS 7. Ambos ainda são arquivoslibstc++.so.6
. As quebras de ABI também podem ocorrer com patches de correção de bugs aplicados pelos mantenedores da distro, que normalmente não aumentariam osso
números das versões principais para correções de bugs.