Como atualizar uma biblioteca compartilhada para uma versão mais nova ao instalar a partir do código-fonte?

0

Estou instalando um aplicativo a partir do código-fonte e ele requer uma biblioteca compartilhada que eu chamarei de abc. O processo de configuração encontra um link simbólico libabc.so em /usr/lib que aponta para uma versão 0.23 do abc que está em /usr/lib folder . No entanto, o projeto que estou instalando requer a versão 0.24 mais recente do abc. Eu fiz o download do código fonte para abc e segui o processo de instalação: (configure, make, make install) . A versão 0.24 do abc agora está instalada em /usr/local/lib . No entanto, o utilitário configure do aplicativo que estou instalando ainda reclama que a versão abc 0.23 não é suficiente para prosseguir com a instalação. Como faço para atualizar o abc instalado no meu sistema de 0,23 para 0,24? Como uma invasão em potencial, acho que eu poderia alterar o link simbólico para /usr/lib/libabc.so apontar para o arquivo em /usr/local/lib , mas não sinto que seja uma solução limpa. Outra possibilidade é dizer ao instalador que procure por bibliotecas compartilhadas também em /usr/local/lib . Qual é a melhor maneira de proceder?

Observe que /usr/local/lib está listado em um dos arquivos de configuração em /etc/ld.so.conf.d/ .

    
por Egbert 04.01.2015 / 23:38

1 resposta

1

Basicamente, se isso é uma atualização, e seu programa antigo também pode confiar em 0.24, eu recomendaria sobrescrever sua instalação de biblioteca anterior com a nova (que é o que chamamos de "upgrade" em um nível mais alto). Embora seja melhor gerenciar tudo isso com um gerenciador de pacotes, você pode estar preso a bibliotecas cuja origem não está disponível nos repositórios de sua distribuição.

Por padrão, as bibliotecas criadas manualmente vão para /usr/local/lib , mas isso é decidido pelo script configure . Se é possível, no entanto, mudar isso:

$ ./configure --prefix=/usr
$ make
$ sudo make install

Usando /usr como um prefixo, objetos de bibliotecas irão para /usr/lib , cabeçalhos para /usr/include , configuração para /usr/etc e assim por diante ... Isso deve basicamente sobrescrever sua versão anterior da biblioteca, já que os arquivos .so de ambas as versões devem ter o mesmo nome se forem mantidos corretamente pelo desenvolvedor.

Agora, se você quiser manter 0,23 (por exemplo, se seu primeiro programa não manipular 0,24), você terá que especificar um caminho para a nova biblioteca (em /usr/local ) para seu último script configure (aquele associado ao programa que requer 0,24).

Na maioria das vezes, os scripts configure fornecem opções para especificar caminhos para as bibliotecas, para que as pessoas em tais situações possam ser específicas durante a instalação. Uma lista dessas opções deve estar visível em ./configure --help . No seu caso, os padrões determinam que esse switch deve ser chamado de --with-libabc ou --with-abc :

$ ./configure --with-libabc=/usr/local/lib

Um bom exemplo disso é a dependência de libxml do PHP:

$ ./configure --with-libxml-dir=...

Alguns scripts também podem fornecer uma opção --with-libdir , que permite alterar completamente o caminho de pesquisa da biblioteca:

$ ./configure --with-libdir=...

Você também pode querer dar uma olhada em esta pergunta do Stack Overflow sobre o arquivo config.site .

    
por 04.01.2015 / 23:52