Compatibilidade binária - ABIs e APIs
Para entender por que as atualizações podem ou não interromper o software existente em sua máquina, você deve ter uma percepção vaga da ABI
Controle de versão da biblioteca compartilhada
O software geralmente é lançado com pelo menos números de versão maiores e menores. Eu li que, geralmente, qualquer incompatibilidade ABI só deve ser introduzida juntamente com uma mudança no número da versão principal. Então, se você está atualizando entre versões secundárias, geralmente deve ser seguro instalar apenas a nova versão sobre a antiga.
As bibliotecas compartilhadas instaladas devem ter um número de versão anexado ao nome do arquivo e, freqüentemente, isso difere do número da versão release . Outros aplicativos, dependendo da biblioteca compartilhada, serão vinculados ao criar o código-fonte. O binário resultante deve então usar o linker dinâmico para procurar a biblioteca compartilhada correta, identificada pelo seu número de versão major . (Isso provavelmente é dependente do vinculador usado e provavelmente há uma opção ld
, que permite que você especifique a versão secundária.)
libsqlite3
Usando libsqlite3-0 (3.7.13-1) como exemplo, tenho um arquivo de biblioteca compartilhada e dois links simbólicos apontando para essa biblioteca:
> ls -l /usr/lib/x86_64-linux-gnu/libsqlite3.so*
lrwxrwxrwx 1 root root 19 Jun 14 14:05 /usr/lib/x86_64-linux-gnu/libsqlite3.so -> libsqlite3.so.0.8.6
lrwxrwxrwx 1 root root 19 Jun 14 14:05 /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 -> libsqlite3.so.0.8.6
-rw-r--r-- 1 root root 692984 Jun 14 14:05 /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6
Então, como saber se uma biblioteca ou um executável foi vinculado a essa biblioteca e de qual versão ela depende?
No Linux, use:
'ldd <filename>'
No OS X:
'otool -L <filename>'
Por exemplo, vamos ver qual versão do módulo sqlite do libsqlite3 Python precisa funcionar.
> ldd /usr/lib/python2.7/lib-dynload/_sqlite3.so | grep sqlite
libsqlite3.so.0 => /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007fe32872c000)
Portanto, ele precisa apenas do link simbólico numerado da versão principal e não da biblioteca compartilhada totalmente nomeada e numerada. Atualizações então, devem apenas atualizar os links simbólicos libsqlite3.so [.0] para apontar para a nova biblioteca compartilhada.
Criando um libsqlite de ponta a partir da fonte criaria, esperamos, uma biblioteca compartilhada com o mesmo número de versão principal. Se não, você pode sempre sobrescrever o link simbólico e apontá-lo para a versão desejada, testar e reverter para os pacotes do sistema, se / quando necessário.
Aptidão
Como você está usando Debian, eu pensei em mencionar também que aptitude
permite que você veja "Pacotes que dependem de libsqlite3-0 (267)" (e o mesmo para qualquer outro pacote também). É claro, se você compilou muitos aplicativos do código-fonte e não informou dpkg
disso, então essa lista pode não ser exaustiva.