Para esta pregunta, usaré un ejemplo específico, pero realmente esto se generaliza a casi cualquier binario en Linux que parece no poder encontrar sus bibliotecas dependientes. Entonces, tengo un programa que no se ejecutará debido a la falta de bibliotecas:
./cart5: error while loading shared libraries: libcorona-1.0.2.so: cannot open shared object file: No such file or directory
ldd arroja algo de luz sobre el tema:
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)
Sin embargo, la 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
¿Cómo le digo al binario dónde buscar la biblioteca "faltante"?
Si desea evitar LD_LIBRARY_PATH, también puede hacerlo durante el enlace:
El -Wl, ... se usa para pasar comandos adicionales al enlazador, y en este caso, con -R le dice al enlazador que almacene esta ruta como la "ruta de búsqueda predeterminada" para el .so.
Mantengo notas de muchos pequeños consejos como este, en mi sitio:
https://www.thanassis.space/tricks.html
fuente
/opt/mypackage/bin/someBinary
, necesitará bibliotecas en las que almacene/opt/mypackage/lib/
. Casi todos los SW propietarios instalados bajo / opt siguen esta regla, lo que significa que la forma que se muestra arriba cubrirá todas esas instalaciones. Por lo general, también agregarán un enlace simbólico debajo de / usr / bin que apunta al binario debajo de / opt, sabiendo que la "ruta de búsqueda predeterminada" encontrará los.so
s en la/opt/.../lib
carpeta correspondiente .Esto indica que libcorona no está instalado en la ruta correcta. Mueva el directorio libcorona a la ruta correcta, el problema se resolverá.
fuente