Vinculando manualmente arquivos de objetos compartilhados

1

Eu tenho mergulhado na dependência de um projeto Yocto Linux embutido em uma tentativa de compilar e instalar um grande projeto. Eu freqüentemente me deparo com um erro ao instalar as dependências (geralmente durante as etapas de configuração / make / make install) que uma biblioteca não pode ser encontrada. Vou dar uma olhada rápida em /usr/lib ou /lib e, com certeza, o arquivo .so está bem aqui.

Por exemplo, se ele reclamar, não poderá encontrar libfoo , vou procurar /usr/lib e ver isto:

$ ls /usr/lib/libfoo*  
libfoo.so.3    libfoo.so.3.5.2

Eu descobri que o vinculador estava procurando por libfoo.so , então criei um link simples:

$ ln -s /usr/lib/libfoo.so.3.5.2 /usr/lib/libfoo.so

E, de repente, o vinculador pôde encontrá-lo durante a compilação e ficou feliz.

Por que preciso fazer isso algumas vezes? Esse procedimento é considerado normal ao instalar manualmente as dependências a partir do código-fonte ou há algum passo que eu esteja ausente do que deveria estar fazendo?

Aqui está minha saída uname se isso for útil:

$uname -a
Linux ventana 3.14.48-1.0.x-ga+yocto+gd9991ca #1 SMP Wed Apr 18 15:23:20 MST 2018 armv7l GNU/Linux
    
por Dan Laks 27.07.2018 / 00:26

1 resposta

1

Geralmente, se um projeto passou por várias versões principais, não é aconselhável ter um .so nulo, porque mudanças importantes na versão geralmente refletem as ABIs incompatíveis. Somente ter arquivos de biblioteca com versão impede que um programa seja vinculado "com êxito", apenas para que o programa resultante falhe de maneiras misteriosas ao atualizar o symlink. (O Windows teve problemas semelhantes nos quais as DLLs mais antigas normalmente não usavam o controle de versão, e os instaladores freqüentemente os substituíam por versões incompatíveis , resultando em "Inferno da DLL".)

Eu verificaria o arquivo README (ou equivalente) para ver quais são os requisitos e execute configure --help para ver se você pode substituir as suposições de fallback feitas; que também terá o benefício de vincular o programa à versão correta da biblioteca.

    
por 27.07.2018 / 01:55

Tags