A biblioteca compartilhada é compatível com ABI desde que suas versões sejam as mesmas?

0

Suponha que eu tenha um programa compilado que esteja vinculado ao 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 da libc 6 (por exemplo, Fedora x64), ele parece rodar bem.

Minha pergunta é, é mais ou menos um contrato que a ABI é estável, desde que as versões sejam idênticas?

    
por wbkang 12.04.2018 / 03:31

1 resposta

2

Não, não é necessário que as bibliotecas compartilhadas sejam uma distribuição cruzada compatível com ABI. Eu acho que é uma expectativa razoável, mas as quebras de ABI acontecem e você não pode confiar na compatibilidade ABI cegamente.

Um exemplo seria libstdc++ . No Ubuntu 16.04 (com o GCC 5) e no CentOS 7 (com o GCC 4.8), os respectivos so s caem em lados opostos de um intervalo ABI . O software compilado no Ubuntu 16.04 com C ++, mas sem _GLIBCXX_USE_CXX11_ABI set, não seria executado no CentOS 7. Eles ainda são libstc++.so.6 . As quebras de ABI também podem acontecer com patches de correção de bugs aplicados pelos mantenedores de distro, que normalmente não colidiriam com os números de versão principais so para correções de bugs.

    
por 12.04.2018 / 04:33