Quando executo um processo vinculado a uma biblioteca compartilhada em tempo de execução (vinculado quando o processo é iniciado, não vinculado posteriormente dlload()
), onde ele procura esse .so
arquivo de biblioteca compartilhada ( ) diferente de LD_LIBRARY_PATH
?
Fundo:
Eu tenho algum código C ++ que escrevi que usa uma biblioteca de terceiros específica. Instalei a biblioteca e compilei meu código em duas plataformas diferentes, Ubuntu, mas versões diferentes e versões diferentes do gcc. A biblioteca foi compilada e instalada a partir da fonte e está localizada em /usr/local/lib
ambas as plataformas. Ao compilar meu código, vinculo-me aos pkg-config --libs
parâmetros da biblioteca de terceiros e verifiquei que pkg-config --libs
retorna exatamente a mesma coisa nas duas plataformas.
Meu código é compilado com êxito nas duas plataformas e LD_LIBRARY_PATH
não está definido (ou definido como vazio :) ""
nas duas plataformas. No entanto, quando eu o executo em um platoform, ele funciona bem e, por outro, recebo este erro:
error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
Curiosamente, o que não funciona é a versão mais recente do Ubuntu e gcc. : /
Então, eu estou tentando descobrir como o que está trabalhando é capaz de localizar a biblioteca, para que eu possa fazer com que o quebrado localize a biblioteca da mesma maneira. (ou seja, sem configuração LD_LIBRARY_PATH
)
Atualizar:
Aqui está a minha saída de cat /etc/ld.so.conf.d/*
... no sistema de trabalho (mais antigo):
/usr/lib/mesa
/usr/lib32/mesa
/usr/lib/alsa-lib
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
... no sistema quebrado (mais recente):
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/mesa
/usr/local/lib/libthrift-0.9.0.so
mas ainda dá o erro error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
... Existe algum motivo para não escolher um diretório /etc/ld.so.conf.d/*.conf
?
sudo ldconfig -v
como sugerido abaixo. Se ainda assim não funcionar, atualize sua pergunta com a saída de ldd /path/to/your/application
.
/etc/ld.so.conf.d/*.conf
, mas não tenho certeza disso.