brak biblioteki współdzielonej - libvw.so.0


1

wszystko, zainstalowałem pakiet „ślubny wabbit”, a także przetestowałem go za pomocą „make test”. Pokazuje, że wszystko jest w porządku. Jednak po wpisaniu „vw” w terminalu występują następujące błędy:

vw: error while loading shared libraries: libvw.so.0: cannot open shared object file: No such file or directory

Mój system to ubuntu12.04-64bit. Czy ktoś mógłby mi powiedzieć, jak rozwiązać ten problem? Dzięki


Zbudowałeś to sam, czy otrzymałeś z pakietu? Czy możesz przebudować lokalizację bazy danych za pomocą, /etc/cron.daily/mlocatea następnie spróbowaćlocate libvw.so.0
Rich Homolka

Zrobiłem to, jak mi powiedziałeś. Znalazłem plik „libvw.so.0”. „/home/tqjustc/Downloads/vowpal_wabbit-7.2/vowpalwabbit/.libs/libvw.so.0” i „/home/tqjustc/Downloads/vowpal_wabbit-7.2/vowpalwabbit/.libs/libvw.so.0.0.0” ” /home/tqjustc/Downloads/vowpal_wabbit-7.2/vowpalwabbit/.libs/libvw.so.0.0.0 "" /usr/local/lib/libvw.so.0 "" /usr/local/lib/libvw.so. 0.0.0 "
Qiongjie Tian 15.04.2013

3
próbowałeś go ustawić LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/libi uruchomić?
Rich Homolka

@RichHomolka Do czego służy to polecenie? dzięki
Qiongjie Tian 15.04.13

Odpowiedzi:


5

Z wiadomości przesyłanych tam iz powrotem wygląda na to, że masz bibliotekę zainstalowaną w / usr / local / lib. Ale twoja aplikacja nie wie, żeby tam szukać biblioteki.

Możesz to rozwiązać na kilka sposobów.

  1. Możesz podać specjalne flagi podczas konfigurowania / budowania projektu, aby informować Twój plik binarny o zameldowaniu / usr / local / lib. Jeśli wiesz, jak ustawić flagi podczas kompilacji, powinieneś ustawić LDFLAGS=-Wl,-rpath,/usr/local/lib. To jednak sprawi, że przebudujesz.

  2. Linker środowiska wykonawczego sprawdza zmienną środowiskową o nazwie, LD_LIBRARY_PATHaby sprawdzić, jakie katalogi sprawdzić, szukając bibliotek współużytkowanych. W takim przypadku, jeśli wpiszesz, export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/liba następnie uruchomisz program, powinien on działać.

  3. Jeśli masz wiele programów, które potrzebują katalogu / usr / local / lib, i uważasz, że można bezpiecznie dołączyć dla wszystkich, możesz ustawić konsolę wykonawczą tak, aby próbowała / usr / local / lib za każdym razem. Możesz upuścić plik /etc/ld.so.conf.dlub edytować, /etc/ld.so.confaby dodać / usr / local / lib. Wpłynęłoby to na każdy plik wykonywalny w twoim systemie, więc uważam, że ten jest dość zaawansowany.

Krótko mówiąc, musisz powiedzieć programowi, jak znaleźć bibliotekę. Najłatwiejszym na razie jest ustawienie LD_LIBRARY_PATHzmiennej za pomocąexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib


0

Aktualizacja: konfigurowałem „Quagga” z kodu źródłowego. Po instalacji, kiedy go uruchomiłem, pojawił się błąd „nie można otworzyć udostępnionego pliku obiektu: brak takiego pliku lub katalogu”. W moim przypadku brakowało „libzebra.so.0”.

Użyłem metody „eksportowania”, jak sugerował Rich w powyższym komentarzu.

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/foobar/lib

Gdzie „/ opt / foobar / lib” to folder biblioteki współdzielonej dla Twojej aplikacji. Dla mnie było to „/ usr / local / lib /”

Nie rozwiązało to jednak mojego problemu. Następnie, aby zaktualizować pamięć podręczną biblioteki współużytkowanej, musiałem wykonać ldconfigprzebudowę pamięci podręcznej biblioteki współużytkowanej. Znalazłem sugestię z tego postu na Githubie , możesz także przeczytać szczegóły z how-to-add-library-directory-saidconfig-cache


2
Chociaż Twój link może zawierać (częściową?) Odpowiedź, lepiej jest opublikować informacje tutaj i dołączyć link w celach informacyjnych.
Scott

Dzięki za sugestie. Pomyślałem, że powinienem po prostu podać dodatkowe polecenie, którego musiałem użyć, aby działało, i podać odniesienie do głównego źródła. Zaktualizuję jednak mój komentarz.
Prasun Dey
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.