Jaka jest różnica między PATH a LD_LIBRARY_PATH?

27

Mam pewne trudności ze zrozumieniem różnicy między PATHi LD_LIBRARY_PATH. Mam konfigurację instalacji, która wymaga pliku pkg.tcl i nie jestem tam, gdzie mam dodać ścieżkę: powinien to być PATHlub LD_LIBRARY_PATH?

Cindy
źródło
Jeśli chodzi o problem z instalacją, osobiście postawiłbym na TCLLIBPATH. Przepraszam, nie mam żadnych argumentów. Tylko wskazówka.
manatwork

Odpowiedzi:

30

Systemy uniksowe są zwykle zorganizowane z różnymi typami plików rozmieszczonymi w różnych katalogach. Na przykład, pliki wykonywalne są zwykle w katalogach nazywanych bin( /bin, /usr/bin, /usr/local/bin, ...); historycznie binoznaczało binarne, ponieważ pliki wykonywalne są binarne (kod maszynowy), ale mogą istnieć również skrypty. Ponieważ istnieje kilka katalogów zawierających pliki wykonywalne, a przydatne jest dodawanie i usuwanie katalogów w locie (np. W celu przetestowania aplikacji wykonywalnej z wieloma plikami wykonywalnymi, tymczasowo dodajesz ją do ścieżki wyszukiwania plików wykonywalnych), dlatego istnieje zmienna środowiskowa: PATH. Kiedy wykonujesz program, podając jego nazwę, powłoka sprawdza go w katalogach wymienionych w PATHzmiennej (jest to lista katalogów oddzielona dwukropkami).

Ten sam mechanizm istnieje w przypadku innych typów plików, które niektóre programy będą wyszukiwać według nazwy. Oto kilka typowych PATHzmiennych (zauważ, że przykładowe ścieżki, które podaję, nie są dokładnie tym, co znajdziesz w systemie, są tam tylko po to, aby dać pomysł).

  • PATH: pliki wykonywalne (np /home/username/bin:/usr/local/bin:/usr/bin:/bin.).
  • MANPATH: strony podręcznika (np /usr/local/man:/usr/man.).
  • LD_LIBRARY_PATH: Natywne biblioteki kodu (na Linuksie, oprócz wartości tej zmiennej, odnośnika ścieżka zawiera zwykle /usr/local/lib, /usr/lib, /libi kilka innych). Nazwa LDpochodzi z dynamicznym l oa d er , komponent system, który ładuje biblioteki w dynamicznie powiązanych plików wykonywalnych .
  • PERL5LIB: Biblioteki Perla (np /usr/local/lib/site-perl:/usr/lib/site-perl:/usr/lib/perl:/usr/share/perl.).
  • PYTHONPATH: Biblioteki Python (np /usr/local/lib/python:/usr/lib/python:/usr/lib/python2.6.).
  • TCLLIBPATH: Biblioteki TCL (np /usr/local/lib/tcltk:/usr/lib/tcltk.).

Więc jeśli twój pkg.tcljest samodzielnym plikiem wykonywalnym, daj mu uprawnienia do wykonywania i upuść go gdzieś $PATH. Jeśli jest to biblioteka TCL załadowana przez program TCL, upuść ją gdzieś $TCLLIBPATH.

Gilles „SO- przestań być zły”
źródło
23

PATHsłuży do określania katalogów programów wykonywalnych. LD_LIBRARY_PATHsłuży do określania katalogów bibliotek.

Manula Waidyanatha
źródło
5
Z innego punktu widzenia PATHjest używany głównie przez powłokę, podczas gdy LD_LIBRARY_PATHjest używany przez dynamiczny moduł ładujący (zwykle ld-linux.so).
manatwork