Está tudo bem (ou não) ligar simbolicamente as bibliotecas para superar os erros “cannot open object shared”?

12

Às vezes, por um motivo ou outro, um programa não especificou ou incluiu todas as suas dependências corretamente, e o seu início resulta em erros indicando dependências ausentes. Um erro típico é algo como:

cannot open shared object libudev.so.0

Eu vejo muitas respostas aconselhando as pessoas a contornar esses problemas criando links simbólicos em /usr/lib ou outros locais do sistema, e isso parece resolver o problema com frequência. Mas vejo um número igual de comentários aconselhando as pessoas que é uma má ideia. Aqui está uma resposta que é representativa.

Em que circunstâncias é aceitável ligar simbolicamente uma biblioteca para fazer um programa funcionar? Nunca? As vezes? E se você excluir o link simbólico depois de terminar de executar o programa?

Quais são as conseqüências de fazer isso?

    
por John Feminella 06.05.2014 / 12:43

1 resposta

12

O problema com a criação desses links é que eles não são gerenciados de nenhuma maneira significativa. Se essa biblioteca for removida, o link será quebrado. Se a biblioteca for atualizada, poderá encontrar um erro devido ao link que não espera estar lá.

Além disso, você está essencialmente mentindo para o sistema. No exemplo vinculado, você está fingindo que libudev.so.1 é realmente libudev.so.0 . Eles são nomeados de forma diferente por um motivo (diferentes versões da biblioteca). Embora isso possa funcionar bem para alguns programas, existe o potencial de que as diferenças entre as versões possam causar problemas (como um segfault ou outro comportamento inesperado).

Portanto, se você estiver criando especificamente esse link apenas para que um programa seja executado e saiba que você o removerá mais tarde, você abordará o primeiro problema, mas não o segundo. Embora isso resolva o problema principal, não é ideal.

A solução ideal é, obviamente, instalar a versão correta da biblioteca (a resposta aceita no seu exemplo vinculado) ou compilar o programa com a versão que você possui.

    
por Nattgew 06.05.2014 / 17:13