2009-03-02 23 views
9

Jakie jest najlepsze miejsce do ustawienia zmiennej specyficznej dla aplikacji LD_LIBRARY_PATH w systemie Solaris? JakGdzie ustawić LD_LIBRARY_PATH w systemie Solaris?

LD_LIBRARY_PATH

zmienną pracę?

Obecnie konfigurujemy to w , ale różne aplikacje wymagają różnych wersji struktury przesyłania wiadomości, ale te aplikacje działają pod tym samym użyciem i dlatego będą potrzebować innej wersji LD_LIBRARY_PATH, więc Twoim zdaniem, co jest najlepszym miejscem do ustawienia tego zmienna?

Zasadniczo staram się dowiedzieć, jak uczynić tę ścieżkę zmiennej częścią aplikacji, a nie specyficzne środowisko użytkownika.

Odpowiedz

14

Zwykle po prostu mam skrypt powłoki, który uruchamia aplikację. W skrypcie powłoki ustawiłbym LD_LIBRARY_PATH na wszystko, co jest potrzebne dla tej aplikacji, a następnie uruchomić skrypt. Wykonanie tego w ten sposób powinno spowodować ustawienie ścieżki tylko dla tej aplikacji.

+0

Dzięki, to było zgodne z założeniami, o których myślałem. Czy jednak byłoby sensowne umieszczenie tej zmiennej w zewnętrznym pliku app_profile, a następnie źródło tego pliku w skrypcie? Czy widzisz jakieś problemy z tym? Zastanawiam się, skoro wiele aplikacji potrzebuje tej samej ścieżki, która może mieć sens w jej eksternalizacji? –

+0

LD_LIBRARY_PATH (lub LD_LIBRARY_PATH_32 i LD_LIBRARY_PATH_64) należy ustawić przed uruchomieniem pliku wykonywalnego - ponieważ ld.so.1 odczytuje go przed przejściem do main() i nie odczytuje go ponownie. –

+0

@Ville - Myślę, że to zadziała, ale najpierw wypróbuj go, aby się upewnić, –

6

Można znaleźć formalny opis LD_LIBRARY_PATH na stronie podręcznika dla "ld.so.1", tj. Uruchomić "man ld.so.1". Opisuje również niektóre inne zmienne, które są honorowane przez linker środowiska wykonawczego.

Oprócz plików LD_LIBRARY_PATH pliki wykonywalne i biblioteki współużytkowane mogą mieć wbudowaną ścieżkę wyszukiwania bibliotek. Jeśli używasz aplikacji, którą sam podłączyłeś, możesz użyć opcji ld -R, aby ustawić wbudowaną ścieżkę (zarówno Sun CC, jak i gcc mają opcje zrobić to samo). Może to w pierwszej kolejności uniemożliwić korzystanie z LD_LIBRARY_PATH.

-1

Można użyć polecenia crle:

crle -l/ścieżka/do/pliku/lib/plik

+1

Crle cierpi na ten sam problem, co ustawienie go w pliku środowiska globalnego - dotyczy wszystkich aplikacji, więc nie pomaga, gdy różne aplikacje wymagają różnych wersji bibliotek. – alanc

+0

alanc ma rację. –

+1

@ananc jest * źle *. 'crle -c' pozwala wpływać na określone aplikacje (patrz Przykład 6 na http://docs.oracle.com/cd/E19082-01/819-2239/crle-1/index.html) – vladr

1

Odpowiedź crle jest najbardziej poprawne. W systemie Solaris nie należy używać LD_LIBRARY_PATH. Zamiast tego użyj Crle. Aby wyświetlić bieżące ścieżki, po prostu uruchom "crle" sam. Aby zaktualizować listę, użyj crle -u -l /path/to/your/lib/directory. Numer -u jest potrzebny do zapisania zmian w konfiguracji systemu, w przeciwnym razie zmiana będzie miała charakter tymczasowy. Zobacz stronę man, aby uzyskać więcej opcji.

+2

Jak zauważono w komentarzach do poprzedniej odpowiedzi, nie jest to najlepsze rozwiązanie, ponieważ wpływa na * wszystkie * programy, a nie tylko te, które wymagają innej ścieżki niż zostały zbudowane. Okładka skryptu powłoki do ustawiania LD_LIBRARY_PATH właśnie dla tych aplikacji jest bezpieczniejsza i bezpieczniejsza niż ryzykowanie zmian we wszystkich programach i jest jedynym sposobem radzenia sobie z różnymi aplikacjami wymagającymi niekompatybilnych ścieżek. – alanc

+2

@ananc, niepoprawny; możesz użyć 'crle -c' do zdefiniowania środowisk dla aplikacji, a la manifestuje się w systemie Windows (patrz Przykład 6 na http://docs.oracle.com/cd/E19082-01/819-2239/crle-1/index. html). – vladr

0

Po prostu znalazłem przypadek, że globalna LD_LIBRARY_PATH nie działa, musiałem zawinąć skrypt i ustawić LD_LIBRARY_PATH przed aplikacją. crle to dobre rozwiązanie globalne, jeśli zainstalowałeś wiele bibliotek pod/opt/csw/lib, przez pkgutil z blastwave.

0

Możesz sprawdzić swój plik .profile lub .profile.user.Nie będzie to oznaczony komentarz. Nie jest to zalecane, ponieważ jest uszkodzone. Powinieneś budować pliki binarne, przekazując wartości do flag, zamiast używać zmienna.

2

Vladr, alanc jest poprawny.

Nie zaleca się ustawiania LD_LIBRARY_PATH w systemie Solaris. W ogóle.

Jeśli potrzebujesz upiec konkretną ścieżkę do biblioteki lub pliku wykonywalnego, , powinieneś użyć flagi -R do linkera. Jeśli budujesz z gcc, to użyj -Wl, Rpath (myślę).

Jeśli musisz to zrobić po kroku kompilacji (np. Ponieważ brakuje Ci źródła do rekompilacji), to elfedit (1) bardzo ci pomoże. Jest to udokumentowane w książce telefonicznej pod adresem , a także w Przewodniku po bibliotekach pod adresem http://docs.oracle.com/cd/E26502_01/html/E26507/index.html

+0

Ze względu na kompatybilność, GCC w systemie Solaris również rozumie "-R". Nadal możesz używać '-Wl, -Rsomedir', ponieważ jest on wtedy przenośny dla systemu Linux. Lub użyj '-Wl, -rpath, somedir' który również jest zrozumiany np. przez link uruchomieniowy w systemie Solaris i Linux. – maxschlepzig

Powiązane problemy