Para esta pergunta, usarei um exemplo específico, mas na verdade isso generaliza para praticamente qualquer binário no linux que não consiga encontrar suas 'bibliotecas dependentes. Então, eu tenho um programa que não será executado por falta de bibliotecas:
./cart5: error while loading shared libraries: libcorona-1.0.2.so: cannot open shared object file: No such file or directory
O ldd lança alguma luz sobre o assunto:
linux-vdso.so.1 => (0x00007fff18b01000)
libcorona-1.0.2.so => not found
libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.3/libstdc++.so.6 (0x00007f0975830000)
libm.so.6 => /lib/libm.so.6 (0x00007f09755af000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f0975399000)
libc.so.6 => /lib/libc.so.6 (0x00007f0975040000)
libz.so.1 => /lib/libz.so.1 (0x00007f0974e2b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0975b36000)
No entanto, a corona está instalada:
oliver@human$ find / -name libcorona-1.0.2.so 2> /dev/null
/usr/local/lib64/libcorona-1.0.2.so
/home/oliver/installed/corona-1.0.2/src/.libs/libcorona-1.0.2.so
Como digo ao binário onde procurar a biblioteca "ausente"?
Se você deseja evitar LD_LIBRARY_PATH, também pode fazer isso durante o link:
O -Wl, ... é usado para passar comandos extras para o vinculador e, nesse caso, com -R, você solicita ao vinculador que armazene esse caminho como o "caminho de pesquisa padrão" para o .so.
Eu mantenho anotações de muitas dicas pequenas como esta, no meu site:
https://www.thanassis.space/tricks.html
fonte
/opt/mypackage/bin/someBinary
, precisará de bibliotecas em que você armazena/opt/mypackage/lib/
. Praticamente todos os SW proprietários instalados sob / opt seguem esta regra - o que significa que a maneira mostrada acima abrangerá todas essas instalações. Eles normalmente também adicionam um link simbólico em / usr / bin que aponta para o binário em / opt - sabendo que o "caminho de pesquisa padrão" encontrará os.so
s na/opt/.../lib
pasta apropriada .Isso indica que a libcorona não está instalada no caminho correto. Mova o diretório libcorona para o caminho correto, o problema será resolvido.
fonte