O que acontecerá se eu instalar a versão mais recente de uma biblioteca existente construindo a partir da origem?

1

Eu sou um noob com o Linux e eu uso o gerenciador de pacotes Synaptic para instalar todo o software que eu preciso. Eu também fiz isso por mathgl, a biblioteca de gráficos científicos.

Recentemente, uma nova versão apareceu online, mas não no gerenciador de pacotes. Eu baixei as fontes e tentei instalá-lo manualmente. As instruções diziam:

cmake .
cmake .
make
make install

Eu fiz exatamente o mesmo, mas depois percebi que esqueci algumas opções de construção. Eu fiz uma pesquisa na web para encontrar uma maneira de desinstalar a biblioteca, para que eu possa instalá-lo com as novas configurações, mas não obtive uma resposta clara. O que descobri é que, quando se trata de desinstalar no Linux, a menos que o desenvolvedor forneça um script de desinstalação, você está sozinho e não é trivial.

Com isso em mente, tentei instalar a biblioteca sem remover a configuração incorreta.

cmake -D enable-all=on -D enable-langall=on .
cmake -D enable-all=on -D enable-langall=on .
make
make install

Tudo parece estar bem. Minha pergunta é a seguinte: há alguma chance de que a consequência da minha ação volte para me assombrar?

Também estou preocupado, porque a antiga biblioteca não foi removida, assim como os antigos cabeçalhos. Outra coisa estranha é que os cabeçalhos antigos estão em

/usr/lib/mgl

enquanto os novos estão em

/usr/local/lib/mgl2

Existe alguma explicação para isso?

    
por Martin Drozdik 19.06.2012 / 08:07

2 respostas

1
  

Existe alguma chance de que a consequência da minha ação volte para me assombrar?

Talvez. Leia em:

  • As novas bibliotecas configuradas ("enable ... :) substituíram as novas bibliotecas mal configuradas que você instalou ... sem danos.

  • As novas bibliotecas estão instaladas em /usr/local porque é o padrão para muitas distribuições Linux, mas não Ubuntu; O Ubuntu coloca-os sob /usr . O primeiro é OK para binários ( /usr/local/bin ), que o Ubuntu tem em seu caminho padrão, e aqueles terão precedência sobre quaisquer binários instalados em /usr/bin , mas isso não é verdadeiro para bibliotecas, porque /usr/local/lib não é no caminho padrão.

  • Todos os programas que usam essa biblioteca continuarão usando os cabeçalhos / versões mais antigos em /usr/lib , a menos que você diga especificamente a esses programas que usem os novos, por exemplo, prefixando-os com LD_LIBRARY_PATH=... ou explicitamente adicionando /usr/local/lib ao seu caminho. Para compilar coisas que dependem dessa biblioteca, você precisará especificar explicitamente o caminho /usr/local/lib para incluir os novos cabeçalhos.

  • Para corrigir isso:

    1. É uma boa ideia remover a versão instalada da repo da biblioteca, a menos que ela tenha muitas dependências e, nesse caso, deixe-a (ou você terá que recompilar o lote).
    2. Instale checkinstall , que você pode usar em vez da etapa make install final para dar a você um arquivo deb que é fácil de instalar e desinstalar.
    3. Defina o prefixo de instalação correto por meio da diretiva -DCMAKE_INSTALL_PREFIX=/usr antes de compilar.

Isso deve ser feito!

    
por ish 19.06.2012 / 12:01
1

Bem, o novo está usando as bibliotecas do /usr/local/lib (este é um lugar comum para softwares instalados pelo usuário). Isso é realmente bom, a principal idéia é não corromper os pacotes instalados através dos gerenciadores de pacotes.
A localização das libs é geralmente definida no Makefile. Eu recomendo não tocar nisso a menos que você saiba o que está fazendo. A versão compilada por você mesmo usará as libs de /usr/local/lib , a outra versão instalada do repositório usará a localização /usr/lib padrão.

    
por Frantique 19.06.2012 / 09:14