Tenho apenas um PC com Linux instalado. No entanto, tenho várias versões da mesma biblioteca. Como softwares diferentes podem depender de versões diferentes da mesma biblioteca, preciso manter todos eles no sistema.
Você tem alguma boa ideia para mantê-los funcionando bem?
Quaisquer referências são bem-vindas.
[Atualizar]
Por exemplo:
Eu tenho duas versões do g++, por exemplo, g++4.8 e g++5.2.
Quero que seus arquivos relacionados sejam armazenados em caminhos diferentes, como:
/soft/g++/4.8/
e/soft/g++/5.2
Quando uso o g++, posso alterar facilmente a versão com um simples comando. Eu encontrei gerenciamento de ambiente de softwarehttp://modules.sourceforge.net/
Responder1
Se sua biblioteca define seunomecorretamente, você pode ter múltiplas versões instaladas sem qualquer dificuldade. Por exemplo, atualmente tenho três versões libreadline
instaladas:
$ ls -l /lib/x86_64-linux-gnu/libreadline.so.*
lrwxrwxrwx 1 root root 18 Dec 4 2015 /lib/x86_64-linux-gnu/libreadline.so.5 -> libreadline.so.5.2
-rw-r--r-- 1 root root 263352 Dec 4 2015 /lib/x86_64-linux-gnu/libreadline.so.5.2
lrwxrwxrwx 1 root root 18 Oct 4 2016 /lib/x86_64-linux-gnu/libreadline.so.6 -> libreadline.so.6.3
-rw-r--r-- 1 root root 296792 Oct 4 2016 /lib/x86_64-linux-gnu/libreadline.so.6.3
lrwxrwxrwx 1 root root 18 Jan 24 16:17 /lib/x86_64-linux-gnu/libreadline.so.7 -> libreadline.so.7.0
-rw-r--r-- 1 root root 309168 Jan 24 16:17 /lib/x86_64-linux-gnu/libreadline.so.7.0
Isso funciona porque os programas vinculam-se ao soname, portanto, qualquer coisa construída para a versão 5 vincula-se a libreadline.so.5
, qualquer coisa construída para a versão 6 vincula-se a libreadline.so.6
etc. O requisito do lado da biblioteca é que todas as versões com o mesmo soname devem preservar sua ABI: novas versões podem adicionar recursos, mas eles não podem quebrar os recursos existentes. Qualquer alteração significativa implica um impacto no soname.
Se tudo isso for feito corretamente (do lado da biblioteca), você nunca deverá precisar de múltiplas versões de uma biblioteca com omesmosoname: contanto que você tenha a versão mais recente, você poderá executar qualquer software desenvolvido em qualquer versão da biblioteca com o mesmo soname. Continuando o libreadline
exemplo, o software construído com a versão 5.1 da biblioteca funciona bem com a versão 5.2. (O inverso não é necessariamente verdadeiro; software que usa novos recursos no 5.2 não funcionará com o 5.1.)
Pode valer a pena dar uma olhada libtool
(sim, eu sei) se você ainda não o estiver usando: ele tem uma capacidade razoavelmente utilizávelesquema de versionamentoque lida com solavancos soname.
Algumas bibliotecas fazem de tudo para minimizar a necessidade de solavancos; a biblioteca GNU C é um exemplo, ela usa extensivamente o controle de versão de símbolos para evitar quebrar a ABI enquanto ainda introduz novos recursos e alterações incompatíveis com versões anteriores (ela apenas mantém as versões antigas,dentroa biblioteca).