Kiedy uruchamiam proces, który łączy się z biblioteką współużytkowaną w czasie wykonywania (połączony podczas uruchamiania procesu, nie połączony później z dlload()), gdzie szuka .soinnego pliku biblioteki współdzielonej ( ) niż LD_LIBRARY_PATH?
Tło:
Mam napisany przez siebie kod C ++, który korzysta z konkretnej biblioteki innej firmy. Zainstalowałem bibliotekę i skompilowałem mój kod na dwóch różnych platformach, zarówno Ubuntu, ale różnych wersjach, a także różnych wersjach gcc. Biblioteka została skompilowana i zainstalowana ze źródła i znajduje się /usr/local/libna obu platformach. Kiedy kompiluję kod, łączę się z pkg-config --libsparametrami biblioteki innej firmy i sprawdziłem, czy pkg-config --libszwraca to samo na obu platformach.
Mój kod kompiluje się pomyślnie na obu platformach i LD_LIBRARY_PATHnie jest zdefiniowany (lub zdefiniowany jako pusty:) ""na obu platformach. Jednak gdy uruchomię go na jednej platformie, działa dobrze, a na drugiej pojawia się ten błąd:
error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
Co ciekawe, te, które nie działają, to nowsza wersja Ubuntu i gcc. : /
Próbuję więc dowiedzieć się, w jaki sposób działający jest w stanie zlokalizować bibliotekę, dzięki czemu uszkodzony mogę zlokalizować bibliotekę w ten sam sposób. (tj. bez ustawienia LD_LIBRARY_PATH)
Aktualizacja:
Oto mój wynik z cat /etc/ld.so.conf.d/*
... w działającym (starszym) systemie:
/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
... w zepsutym (nowszym) systemie:
# 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.soale nadal powoduje błąd error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory... Czy jest jakiś powód, dla którego nie chciałby pobrać katalogu /etc/ld.so.conf.d/*.conf?
sudo ldconfig -vzgodnie z sugestią poniżej. Jeśli nadal nie działa, zaktualizuj swoje pytanie z wynikiem ldd /path/to/your/application.
/etc/ld.so.conf.d/*.conf, ale nie jestem tego pewien.