2012-07-18 9 views
25

Podczas pracy: pojawia się następujący błądbłąd ldconfig: nie jest dowiązaniem symbolicznym

sudo /sbin/ldconfig 

:

/sbin/ldconfig: /usr/local/lib/ is not a symbolic link 

Kiedy uruchomić plik:

file /usr/local/lib/ 
    /usr/local/lib/: directory 

Wewnątrz /usr/local/lib/ istnieją trzy biblioteki, których używam. Nazwałbym je tutaj jako lib1, lib2 i lib3.

Teraz, kiedy zrobić ldd na moim binarnym wynika:

lib1.so => not found 
    lib2.so => not found 
    lib3.so => /usr/local/lib/lib3.so (0x00216000) 

Ale wtedy wszyscy są w tym samym folderze co /usr/local/lib/{lib1,lib2,lib3}.so.

każdym razem uruchomić ldconfig pojawia się ten sam błąd:

/usr/local/lib/ is not a symbolic link 

Myślałem /usr/local/lib powinny zostać uznane dwukrotnie w /etc/ld.conf.d/*.conf, ale nie:

sudo egrep '\/usr\/local' /etc/ld.so.conf.d/* 
    projectA.conf.old:/usr/local/projectA/lib 
    local.conf:/usr/local/lib 

ld.so.conf obejmuje tylko /etc/ld.so.conf.d/*.conf, więc *.old nie jest przetwarzany i odnosi się do /usr/local/projectA/lib.

Po pewnym czasie usunąłem wszystkie lib1 i lib2 (w pewnym momencie przetestowałem je w folderze binarnym), pojawia się ten sam błąd.

Odpowiedz

28

Wpadłem na ten problem z klientem Oracle 11R2. Nie jestem pewien, czy instalator Oracle zrobił to, czy ktoś zrobił to tutaj przed moim przybyciem. To nie było 64-bitowe w porównaniu z 32-bitowym, wszystko było 64-bitowe.

Błąd polegał na tym, że libexpat.so.1 nie był łączem symbolicznym.

Okazało się, że były dwa identyczne pliki: libexpat.so.1.5.2 i libexpat.so.1. Usunięcie pliku powodującego obrażenia i utworzenie dowiązania symbolicznego do wersji 1.5.2 spowodowało, że błąd zniknął.

Ma sens, że chcemy, aby znana nazwa była dowiązaniem symbolicznym do bieżącej wersji. Jeśli to zrobisz, jest mniej prawdopodobne, że skończysz z nieaktualną biblioteką.

+0

czy udostępniają ten sam wynik md5sum, zanim znikną? –

+2

tak. Jak już powiedziałem, były to * identyczne * pliki. –

+0

To nie był ktoś przed tobą. Instalator klienta to robi. Poprawka sugeruje, że działa. –

2

Musisz zawierać ścieżkę bibliotek wewnątrz /etc/ld.so.conf i ponownie uruchom ldconfig do upate listę

Inna możliwość jest włączenie w env zmiennej LD_LIBRARY_PATH ścieżkę do biblioteki, i ponownie uruchom plik wykonywalny.

sprawdź linki symboliczne, czy wskazują one na ważnej bibliotece ...

Możesz dodać ścieżkę bezpośrednio w /etc/ld.so.conf, bez obejmują ...

run ldconfig -p do zobacz, czy twoja biblioteka jest dobrze uwzględniona w pamięci podręcznej.

+0

Droga już jest pod adresem: local.conf, jego zawartość: /usr/local/lib na ld.so.conf jest tym co file.conf wewnątrz folderu określon: /etc/ld.so.conf .d/*. conf –

+0

czy jesteś pewien, że jest on przetwarzany dobrze? – alinsoar

+0

Jest to jedna z możliwości, ale znalazłem plik lib3.so, który znajduje się dokładnie w tym folderze. /usb/local/lib przechowuje {lib1.so, lib2.so, lib3.so} –

5

Rozwiązany, przynajmniej w punkcie pytania.

Szukałem w Internecie przed pytaniem, nie było jednoznacznego rozwiązania, powodem tego błędu jest: lib1.so i lib2.so nie są w porządku, prawdopodobnie nie zostały skompilowane na 64 PC, ale dla 32-bitowy komputer inaczej lib3.so jest biblioteką 64-bitową. Taka przynajmniej jest moja hipoteka.

BARDZO niestety ldconfig nie daje czystą komunikat informujący, że nie można załadować biblioteki, to tylko pompy:

ldconfig:/folder_where_the_wicked_lib_is/nie jest dowiązaniem symbolicznym

Rozwiązałem to kiedy usunąłem biblioteki nie znalezione przez LDD przez plik binarny. Teraz łatwiej jest wiedzieć, gdzie leży problem.

Moja ld wersja: GNU ld wersja 2.20.51, i nie wiem, czy najnowsza wersja ma lepszą wiadomość dla użytkowników.

Dzięki.

1

po prostu zabrakło poniższego polecenia:

export LD_LIBRARY_PATH=/usr/lib/ 

wyśmienitą Teraz pracuje.

Powiązane problemy