Como posso consertar conflitos de biblioteca durante a compilação, originados de pacotes instalados manualmente a partir do código-fonte?

0

Eu tenho o Ubuntu 14.04 atualizado a partir do 12.04 fazendo dist-upgrades. Eu fiz muitas instalações manuais, como ffmpeg , libglib e assim por diante, no passado. Eu tenho uma boa distribuição personalizada agora, funciona bem, mas eu tenho problemas ao tentar compilar aplicativos. Os erros que recebi me ensinaram muito, descobri como lidar com erros de linker, listo alguns deles abaixo:

how-can-i-guide-compiler -para usar uma determinada biblioteca

como-corrigir-pkg -prog-pkg-config-comando-não-encontrado-erro

pkg-config-modversion-glib-2-0 -reports-older-version

how-to-fix-libgmodule-2-0-so-0-não-pode-ler-símbolos-inválido-operação-erro

multiple-ffmpeg-library-paths -how-can-exclude-older-ffmpeg-instalações

how-can-i-use-a-particular -library-while-compiling

Chego a tal ponto que até eu consigo erros ao compilar aplicativos nativos do Ubuntu, como unidade (eu quero incorporar o lançador de unidade no cairo dock lançador de unidade no cais do cairo )

Como posso corrigir esses conflitos de biblioteca? Eu perdi diretórios de aplicativos compilados manualmente, então não tenho chance de executar make uninstall .

Estou farto de ajustar os caminhos da biblioteca. O que você me sugere nesta posição?

    
por kenn 15.07.2014 / 16:10

1 resposta

1

A questão principal aqui foi a existência de bibliotecas e inclui em /usr/local que foram compiladas no Precise (12.04).

Ao pesquisar pelos cabeçalhos de desenvolvimento especificados por #include , gcc e g++ têm /usr/local/include maior na lista do que /usr/include . Portanto, se você tiver os cabeçalhos de desenvolvimento de uma biblioteca em /usr/local/include e /usr/include , então o em /usr/local/include será usado, independentemente da versão . Embora isso possa ter sido bom no Precise, uma vez que as bibliotecas compiladas localmente eram provavelmente versões mais recentes, isso não seria bom em Trusty, quando a versão do sistema da biblioteca seria de uma versão igual ou mais recente da biblioteca que você instalou . Além disso, como as bibliotecas do sistema foram alteradas, os SONAMEs teriam sido alterados e as bibliotecas compiladas localmente teriam que ser recompiladas. Portanto, gcc / g++ usaria a versão mais antiga e pode reclamar sobre falta de símbolos e / ou erros de vinculação.

Se uma biblioteca estiver presente nos repositórios principais, geralmente é recomendado usar essa biblioteca em vez de compilá-la por si mesmo (a menos que você precise de uma nova versão de uma biblioteca para desenvolvimento ou correção um inseto); Dessa forma, quando você atualiza seu sistema, essa biblioteca também é atualizada e recompilada para vincular corretamente com as outras bibliotecas.

    
por saiarcot895 16.07.2014 / 16:48