W tym pytaniu użyję konkretnego przykładu, ale tak naprawdę uogólnia on na prawie każdy plik binarny na Linuksie, który nie wydaje się znajdować swoich zależnych bibliotek. Mam więc program, który nie uruchomi się z powodu brakujących bibliotek:
./cart5: error while loading shared libraries: libcorona-1.0.2.so: cannot open shared object file: No such file or directory
ldd rzuca nieco światła na ten problem:
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)
Jednak corona jest zainstalowana:
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
Jak mam powiedzieć binarnemu, gdzie szukać „brakującej” biblioteki?
Jeśli chcesz uniknąć LD_LIBRARY_PATH, możesz to zrobić również podczas łączenia:
Opcja -Wl, ... służy do przekazywania dodatkowych poleceń do konsolidatora, aw tym przypadku za pomocą opcji -R nakazuje konsolidatorowi zapisanie tej ścieżki jako „domyślnej ścieżki wyszukiwania” .so.
W mojej witrynie przechowuję notatki z wielu małych wskazówek, takich jak ten:
https://www.thanassis.space/tricks.html
źródło
/opt/mypackage/bin/someBinary
będzie potrzebował bibliotek, które przechowujesz/opt/mypackage/lib/
. Prawie wszystkie zastrzeżone oprogramowanie zainstalowane pod / opt działa zgodnie z tą zasadą - co oznacza, że powyższy sposób obejmie wszystkie takie instalacje. Zazwyczaj dodają także dowiązanie symboliczne pod / usr / bin, które wskazuje na plik binarny pod / opt - wiedząc, że „domyślna ścieżka wyszukiwania” znajdzie.so
s pod odpowiednim/opt/.../lib
folderem.Oznacza to, że libcorona nie jest zainstalowana we właściwej ścieżce. Przenieś katalog libcorona do właściwej ścieżki, problem zostanie rozwiązany ..
źródło