Quando executo um processo vinculado a uma biblioteca compartilhada no tempo de execução (vinculado quando o processo é iniciado, não vinculado posteriormente com dlload()
), onde ele procura esse arquivo de biblioteca compartilhada ( .so
) diferente de LD_LIBRARY_PATH
?
Histórico:
Eu tenho algum código C ++ que eu escrevi que usa uma biblioteca particular de terceiros. Eu instalei a biblioteca e compilei meu código em duas plataformas diferentes, tanto o Ubuntu, mas versões diferentes, e versões diferentes do gcc também. A biblioteca foi compilada e instalada a partir do código-fonte e está localizada em /usr/local/lib
em ambas as plataformas. Quando eu compilo meu código, eu faço um link com os parâmetros pkg-config --libs
para a biblioteca de terceiros e verifiquei que pkg-config --libs
retorna exatamente a mesma coisa em ambas as plataformas.
Meu código é compilado com êxito nas duas plataformas e LD_LIBRARY_PATH
não está definido (ou definido como vazio: ""
) em ambas as plataformas. No entanto, quando eu corro em uma platoform funciona bem, e por outro eu recebo este erro:
error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
Curiosamente, os que não funcionam são a versão mais recente do Ubuntu e do gcc. : /
Então, eu estou tentando descobrir como o trabalho é capaz de localizar a biblioteca, para que eu possa fazer o quebrado localizar a biblioteca da mesma maneira. (isto é, sem definir LD_LIBRARY_PATH
)
Atualização:
Aqui está 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