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 .so
innego 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/lib
na obu platformach. Kiedy kompiluję kod, łączę się z pkg-config --libs
parametrami biblioteki innej firmy i sprawdziłem, czy pkg-config --libs
zwraca to samo na obu platformach.
Mój kod kompiluje się pomyślnie na obu platformach i LD_LIBRARY_PATH
nie 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.so
ale 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 -v
zgodnie 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.