Instaluję program na serwerze jako użytkownik inny niż root. W szczególności jest to Tmux 1.5, ale moim zdaniem powinno to dotyczyć ogólnie wszystkich programów zainstalowanych lokalnie (wymieniam nazwę programu, na wypadek gdyby ten problem nie był moim błędem).
Program wymaga zainstalowania niektórych bibliotek zależnych (np. Libevent i ncurses). Więc zainstalowałem je oba lokalnie, ponieważ nie mam dostępu do roota
cd $HOME/library/installation/folder
DIR=$HOME/local
./configure --prefix=$DIR
#... make ... make install
Teraz, aby zainstalować program, musiałem również dołączyć pakiety bibliotek:
cd $HOME/program/installation/folder
./configure --prefix=$DIR CFLAGS="-I$DIR/include" LDFLAGS="-L$DIR/lib"
#... make ... make install
Ok, więc to instaluje program bez problemów do $ HOME / local / bin, ale jeśli uruchomię plik wykonywalny: $ HOME / local / bin / tmux, pojawia się następujący błąd:
tmux: błąd podczas ładowania bibliotek współdzielonych: libevent-2.0.so.5: nie można otworzyć pliku obiektu współdzielonego: brak takiego pliku lub katalogu
Wydaje mi się, że program nie może znaleźć pożądanych bibliotek, ale plik libevent-2.0.so.5 rzeczywiście istnieje w $ HOME / local / lib, jak określono w opcjach konfiguracji. Zastanawiam się, jak mogę uruchomić program, aby rozpoznał zainstalowaną bibliotekę. Próbowałem umieścić dowiązania symboliczne w $ HOME / lib, $ HOME / bin i $ HOME / local / bin, ale żadne z nich nie zadziałało. Wszelkie pomysły i sugestie będą mile widziane
źródło
-R $DIR/lib
żeCFLAGS
jest w trakcie budowytmux
(i nielibevent
). To mi nie pomogło - był jakiś końcowy błąd z gcc, który powiedział, że nie może rozpoznać-R
(próbowałem również bez spacji między-R
i$DIR
). ./configure --disable-shared To działało, aktualizacjaLD_LIBRARY_PATH
również działało. Skończyło się na zrobieniulibevent
ponownie z powyższą--disable-shared
opcją.Odpowiedzi:
Spróbuj ponownie zbudować libevent przy użyciu
Podejrzewam, że to rozwiąże twój problem, ponieważ biblioteka zostanie połączona podczas tworzenia pliku binarnego i nie trzeba jej przeszukiwać w czasie wykonywania.
Alternatywnie, jeśli potrzebujesz dynamicznie połączonego libevent, możesz dodać katalog zawierający libevent-2.0.so.5 do zmiennej środowiskowej LD_LIBRARY_PATH:
źródło
Możesz także ustawić RPATH, która koduje łatkę przeszukiwania biblioteki w samym pliku binarnym .
Po prostu dodaj
-R $DIR/lib
doCFLAGS
.źródło
Nie mam szczęścia z innymi, ale to zadziałało dla mnie stąd :
źródło
Zadałem podobne pytanie , co ciekawe, także o budowaniu
tmux
wszystkich rzeczy (chociaż wciąż jestem pewien, że dotyczy to niemal każdej sytuacji, w której GNUconfigure
imake
są używane razem.Wierzę, że czystszym podejściem jest wykorzystanie tak zwanej „rpath” - ścieżki wyszukiwania biblioteki osadzonej w pliku binarnym.
-rpath
Przełącznik przynajmniej GNU łącznikld
określa ścieżkę.Wiersz polecenia kompilacji wyglądałby wtedy następująco:
Nie tak naprawdę tutaj najważniejsze, ale
PKG_CONFIG_PATH
powyżej jest po prostu zalecanym sposobem na to, co ludzie robią ręcznie, wysyłając-L/path/to/libevent/lib -I/path/to/libevent/include
na./configure
skrypt. Podczas kompilacjilibevent
instaluje własne pliki konfiguracyjne dlapkg-config
(z których korzysta./configure
). Powinieneś go użyć, ponieważ tylko nalibevent
pewno wie, jakich przełączników należy użyć podczas budowania przeciwko niemu.W każdym razie w niektórych sytuacjach
-rpath
jest to czystsze podejście do rozwiązania problemu.LD_LIBRARY_PATH
oparte na rozwiązaniach pozwalają jednak żonglować biblioteką używaną przez wbudowany plik binarny w czasie wykonywania, co jest czasem pożądane. Ale jeśli chcesz po prostu zbudować w oparciu o określoną bibliotekę, którą umieściłeś gdzieś w specjalnym miejscu w folderze domowym, myślę-rpath
, że oparte na rozwiązaniach rozwiązania należy traktować jako odpowiedź kanoniczną.Dziwne jest to, dlaczego
tmux
własne skrypty budowania nie wywodzą tej ścieżki ze ścieżki przeszukiwania biblioteki podczas budowania. Może nie potrzebują i nie powinni, nie wiem. Czy to przypadek, że przytrafiło się nam, którzy budujemytmux
?źródło