Pytanie / usr / bin / ld: ostrzeżenie: abc.so, wymagane przez xyz.so nie znaleziono (spróbuj użyć -rpath lub -rpath-link) "


Buduję aplikację C ++, używając Netbeans 6.9 jako mojego IDE. Mam bibliotekę C ++, która jest wrapper wokół czystej biblioteki C.

Poprawnie dodałem plik do projektu (za pomocą opcji Dodaj plik biblioteki). Oto dane wyjściowe wygenerowane przez g ++ i linker:

g++  -o dist/Debug/GNU-Linux-x86/testluaembed build/Debug/GNU-Linux-x86/src/main.o build/Debug/GNU-Linux-x86/src/LuaBinding.o -L../../mainline/tanlib_core/dist/Debug/GNU-Linux-x86 -L../../mainline/tanlib++/dist/Debug/GNU-Linux-x86 -L/usr/lib ../../mainline/tanlib_core/dist/Debug/GNU-Linux-x86/libtanlib_core.so ../../mainline/tanlib++/dist/Debug/GNU-Linux-x86/libtanlibpp.so /usr/lib/liblua5.1.a /usr/lib/libtolua++5.1.a /usr/local/boost_1_45_0/stage/lib/libboost_filesystem.a /usr/local/boost_1_45_0/stage/lib/libboost_system.a 
/usr/bin/ld: warning: libtanlib_core.so, needed by ../../mainline/tanlib++/dist/Debug/GNU-Linux-x86/libtanlibpp.so, not found (try using -rpath or -rpath-link)
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc':
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc':
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc':
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc':
/usr/lib/liblua5.1.a(loadlib.o): In function `gctm':
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/GNU-Linux-x86/testluaembed] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

Uruchomiłem ldd w bibliotece opakowania C ++ i otrzymałem to wyjście:

$ldd libtanlibpp.so 
    linux-vdso.so.1 =>  (0x00007fff123c0000)
    libtanlib_core.so => not found
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fe4f0fde000)
    libm.so.6 => /lib/libm.so.6 (0x00007fe4f0d5a000)
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007fe4f0b43000)
    libc.so.6 => /lib/libc.so.6 (0x00007fe4f07c0000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fe4f15ee000)

Więc chociaż plik istnieje na moim komputerze, wygląda na to, że nie znajduje się on w mojej pamięci podręcznej biblioteki. Próbowałem używać ldconfig, ale problem pozostaje. Wszelkie pomysły, jak rozwiązać ten problem?


12
2018-02-06 12:02


pochodzenie




Odpowiedzi:


Upewnij się, że katalog gdzie libtanlib_core.so jest umieszczony jest skonfigurowany w /etc/ld.so.conf (lub /etc/ld.so.conf.d/) - Inaczej ldconfig nie znajdę tego.


6
2018-02-06 12:30



Podejrzewałem, że to był problem z konfiguracją. Jak "Upewnij się, że katalog, w którym znajduje się libtanlib_core.so, jest skonfigurowany w /etc/ld.so.conf" ?. Czy możesz wyjaśnić, jak umieścić ten katalog w pliku ld.so.conf ?. Czy po prostu ręcznie edytuję plik lub czy potrzebuję użyć narzędzia? - oompahloompah
@oompahloompah Edycja ręczna wykona zadanie - Dmitry Yudakov
Dzięki. Próbowałem już tego i zadziałało. - oompahloompah