como gerenciar múltiplas bibliotecas no mesmo sistema linux? [fechadas] ______ qstntxt ___

Eu tenho apenas um PC com Linux instalado. No entanto, tenho várias versões da mesma lib. Como softwares diferentes podem depender de versões diferentes da mesma biblioteca, tenho que manter todos eles no sistema.

Você tem boas ideias 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.

Eu quero que os arquivos relacionados sejam armazenados em caminhos diferentes, como: %code% e %code%

Quando uso o g ++, posso facilmente alterar a versão por um comando simples. Eu encontrei o link do gerenciamento de ambiente de software

    
______ azszpr358957 ___

Se a sua biblioteca definir seu soname corretamente, você poderá ter várias versões instaladas sem qualquer dificuldade. Por exemplo, atualmente tenho três versões de %code% installed:

%pre%

Isso funciona porque os programas são vinculados ao soname, então qualquer coisa construída para a versão 5 vincula-se a %code% , qualquer coisa construída para links da versão 6 contra %code% etc. O requisito da biblioteca é que todas as versões com o mesmo soname devem preservar sua ABI: novas versões podem adicionar recursos, mas não podem quebrar recursos existentes. Qualquer quebra de mudança implica um salto sonoro.

Se tudo isso for feito corretamente (no lado da biblioteca), você nunca precisará de várias versões de uma biblioteca com o mesmo soname: contanto que você tenha a versão mais recente, você Será capaz de executar qualquer software construído em qualquer versão da biblioteca com o mesmo soname. Continuando com o exemplo %code% , o software construído com a versão 5.1 da biblioteca roda bem com a versão 5.2. (O inverso não é necessariamente verdadeiro; o software que usa novos recursos em 5.2 não será executado com 5.1.)

Pode valer a pena olhar para %code% (sim, eu sei) se você ainda não estiver usando: ele tem um razoavelmente utilizável esquema de versionamento que lida com solavancos sonoros.

Algumas bibliotecas chegam a extremos extraordinários para minimizar a necessidade de solavancos sonoros; A biblioteca GNU C é um exemplo, usa extensivamente versões de símbolos para evitar quebrar a ABI enquanto ainda introduz novos recursos e mudanças incompatíveis com versões anteriores (apenas mantém as versões antigas, dentro da biblioteca).

    
___

2

Eu tenho apenas um PC com Linux instalado. No entanto, tenho várias versões da mesma lib. Como softwares diferentes podem depender de versões diferentes da mesma biblioteca, tenho que manter todos eles no sistema.

Você tem boas ideias 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.

Eu quero que os arquivos relacionados sejam armazenados em caminhos diferentes, como: /soft/g++/4.8/ e /soft/g++/5.2

Quando uso o g ++, posso facilmente alterar a versão por um comando simples. Eu encontrei o link do gerenciamento de ambiente de software

    
por aban 14.04.2017 / 06:53

1 resposta

2

Se a sua biblioteca definir seu soname corretamente, você poderá ter várias versões instaladas sem qualquer dificuldade. Por exemplo, atualmente tenho três versões de libreadline installed:

$ 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 são vinculados ao soname, então qualquer coisa construída para a versão 5 vincula-se a libreadline.so.5 , qualquer coisa construída para links da versão 6 contra libreadline.so.6 etc. O requisito da biblioteca é que todas as versões com o mesmo soname devem preservar sua ABI: novas versões podem adicionar recursos, mas não podem quebrar recursos existentes. Qualquer quebra de mudança implica um salto sonoro.

Se tudo isso for feito corretamente (no lado da biblioteca), você nunca precisará de várias versões de uma biblioteca com o mesmo soname: contanto que você tenha a versão mais recente, você Será capaz de executar qualquer software construído em qualquer versão da biblioteca com o mesmo soname. Continuando com o exemplo libreadline , o software construído com a versão 5.1 da biblioteca roda bem com a versão 5.2. (O inverso não é necessariamente verdadeiro; o software que usa novos recursos em 5.2 não será executado com 5.1.)

Pode valer a pena olhar para libtool (sim, eu sei) se você ainda não estiver usando: ele tem um razoavelmente utilizável esquema de versionamento que lida com solavancos sonoros.

Algumas bibliotecas chegam a extremos extraordinários para minimizar a necessidade de solavancos sonoros; A biblioteca GNU C é um exemplo, usa extensivamente versões de símbolos para evitar quebrar a ABI enquanto ainda introduz novos recursos e mudanças incompatíveis com versões anteriores (apenas mantém as versões antigas, dentro da biblioteca).

    
por 14.04.2017 / 09:00