Instalowanie wielu wersji biblioteki współdzielonej

1

Używam Ubuntu 10.04 i chcę używać Tmux 1.6. tmux jest zależny od libevent 2.

Moim rozwiązaniem było skompilowanie libevent2 i /usr/local/libwklejenie do niego, a następnie skompilowanie tmux z tą biblioteką lib /usr/local/bin. Działa to świetnie, dopóki ... nie uruchomię ponownie. To tylko moje założenie, ale wygląda na to, że inne pliki binarne łączą się teraz z biblioteką libevent2, prawdopodobnie dlatego, że znajduje się ona na ścieżce biblioteki. Ponieważ jest ponad 60 pakietów z zależnościami libevent1, powoduje to, że moja instalacja w zasadzie traci rozum.

Czy istnieje idiomatyczny sposób podejścia do uruchamiania aplikacji, która jest zależna od biblioteki podstawowej w innej wersji? Czy powinienem po prostu statycznie powiązać lib?

nsfyn55
źródło
Sprawdź, co się dzieje ldd. Gdzieś masz zły link symboliczny lub źle nazwany plik. Programy wymagające libevent2 powinny odnosić się do libevent-2.
David Schwartz

Odpowiedzi:

0

http://www.ibm.com/developerworks/linux/library/l-lpic1-v3-102-3/ sugeruje

Ładowanie określonych bibliotek

Jeśli korzystasz ze starszej aplikacji, która wymaga określonej starszej wersji biblioteki współużytkowanej lub opracowujesz nową bibliotekę współdzieloną lub wersję biblioteki współużytkowanej, możesz zastąpić domyślne ścieżki wyszukiwania używane przez moduł ładujący. Może to być również potrzebne w skryptach korzystających z bibliotek współdzielonych specyficznych dla produktu, które mogą być zainstalowane w drzewie / opt. Tak jak możesz ustawić zmienną PATH tak, aby określała ścieżkę wyszukiwania dla plików wykonywalnych, możesz ustawić zmienną LD_LIBRARY_PATH na rozdzieloną dwukropkami listę katalogów, które powinny być wyszukiwane w poszukiwaniu bibliotek współużytkowanych przed bibliotekami systemowymi określonymi w pliku ld.so.cache. Na przykład możesz użyć polecenia takiego jak:

export LD_LIBRARY_PATH=/usr/lib/oldstuff:/opt/IBM/AgentController/lib

Artykuł powiązany z ilustruje, jak używać ldd, aby dowiedzieć się, od jakich bibliotek zależy program.

RedGrittyBrick
źródło
0

Skompilowane programy binarne zwykle łączą się z /usr/lib/libXXX.so.1.2.3

Jeśli używasz określonej nowej wersji, możesz ją wpuścić, /usr/lib/libXXX.so.3.4.5 a Twój nowo utworzony program powinien się z tym połączyć.

Możesz faktycznie sprawdzić, czy stare programy łączą się teraz z nową biblioteką ldd /path/to/program.

Jeśli tak się naprawdę stanie, możesz:

  • umieść nową bibliotekę w osobnym katalogu /special/path/libi
  • uruchom swój specjalny program za pomocą skryptu powłoki, który ustawia, LD_LIBRARY_PATH=/special/path/lib:$LD_LIBRARY_PATH a następnie uruchamia plik binarny lub
  • jeśli sam skompilujesz swój program, możesz przekazać LDFLAGS=-Wl,-rpath,/special/path/lib, to na stałe wpisuje ścieżkę wyszukiwania specjalnej biblioteki do swojego programu (fajnie, ponieważ działa bez skryptu opakowania)
Fra Orolo
źródło