Use bibliotecas compartilhadas em / usr / local / lib

52

Eu construí algumas bibliotecas de fontes, e os arquivos após make install estão em /usr/local/lib

Por exemplo, no meu caso, eu tenho o arquivo libodb-2.2.so , que está nesse diretório.

No entanto, quando eu lanço o executável que tem linkado com libodb , recebo o erro: erro ao carregar bibliotecas compartilhadas: libodb-2.2.so: cannont open shared object file: No such file or directory.

Isso significa que eu construí meu executável não corretamente? ou devo indicar ao sistema que pode haver algumas bibliotecas interessantes na pasta /usr/local/lib também?

Estou usando o Ubuntu 12.04, kernel Linux 3.2.0-38-genérico.

    
por Stephane Rolland 13.03.2013 / 15:01

2 respostas

50

Para a sessão atual, você pode

export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib

ou para tornar a mudança permanente, você pode adicionar /usr/local/lib a /etc/ld.so.conf (ou algo que ele inclui) e executar ldconfig como root.

Se você ainda estiver com problemas, a execução de ldd [executable name] mostrará as bibliotecas que está tentando encontrar e quais não podem ser encontradas.

    
por 13.03.2013 / 15:05
33

Se você já executou ldconfig depois de criar a biblioteca, continue lendo. Se não, leia primeiro o ldconfig .

/usr/local/lib pode não estar no caminho da biblioteca usado pelo ldconfig. Você pode fazer isso:

ldconfig /usr/local/lib

E o material deve ser adicionado ao cache do vinculador, mas provavelmente é melhor adicionar o caminho corretamente. Verifique se você tem um diretório /etc/ld.so.conf.d . Se assim for, adicione um arquivo (chame-o "usr-local.conf", ou qualquer outro), e coloque uma linha nele:

/usr/local/lib

Agora, execute ldconfig . Se você não tiver o diretório ld.so.conf.d, deverá ter um /etc/ld.so.conf arquivo e poderá adicionar essa linha ao final dele.

    
por 13.03.2013 / 15:12