Jak ustawić zmienną środowiskową LD_LIBRARY_PATH w systemie Linux

212

Najpierw wykonałem polecenie: export LD_LIBRARY_PATH=/usr/local/lib

Wtedy otworzyły .bash_profilepliku: vi ~/.bash_profile. W tym pliku umieszczam:

LD_LIBRARY_PATH=/usr/local/lib
export LD_LIBRARY_PATH

Następnie, jeśli terminal zostanie zamknięty i zrestartowany, pisanie echo $LD_LIBRARY_PATHnie wyświetli żadnego wyniku.

Jak ustawić ścieżkę na stałe?

singha
źródło
9
Wskazując to oczywiste tutaj ... Jeśli chcesz tylko naprawić to, co zrobiłeś, dodaj $np.export LD_LIBRARY_PATH=$LD_LIBRARY_PATH
Cookie
11
po prostu biegnij sudo ldconfigpotem
Necktwi
to może być głupie, ale czy ty $ source ~/.bash_profile? Zazwyczaj o tym zapominam. A potem jak @neckTwi powiedział biegnij ldconfig
ashley

Odpowiedzi:

208

Powinieneś dodać więcej szczegółów na temat swojej dystrybucji, na przykład w Ubuntu dobrym sposobem na to jest dodanie niestandardowego .confpliku /etc/ld.so.conf.d, na przykład

sudo gedit /etc/ld.so.conf.d/randomLibs.conf

w pliku należy zapisać pełną ścieżkę do katalogu zawierającego wszystkie biblioteki, które chcesz dodać do systemu, na przykład

/home/linux/myLocalLibs

pamiętaj, aby dodać tylko ścieżkę do katalogu, a nie pełną ścieżkę do pliku, wszystkie biblioteki wewnątrz tej ścieżki zostaną automatycznie zindeksowane.

Zapisz i uruchom, sudo ldconfigaby zaktualizować system za pomocą tych bibliotek.

użytkownik1824407
źródło
Przepraszamy za brak wzmianki o dystrybucji. Jego Fedora 16
singha
możesz użyć tego rozwiązania dla Fedory, rozwiązanie sugerowane przez Joachima Pileborga jest przydatne, jeśli zdecydujesz się ograniczyć widok tych bibliotek do 1 określonego użytkownika, jeśli chcesz, aby biblioteka ogólnosystemowa korzystała z mojego rozwiązania. Wszystko zależy od tego, czego szukasz.
user1824407,
11
Czy to naprawdę właściwa droga? Załóżmy, że masz wielu użytkowników budujących biblioteki lokalne i dodałeś ich obu do /etc/ld.so.conf.d. Teraz użytkownik A może połączyć się z lokalnymi bibliotekami użytkownika B. Niedobrze.
ergosys
/usr/local/libzwykle już tam jest, więc nie trzeba edytować żadnych plików, po prostu sudo ldconfig.
nyuszika7h
1
Dziwne, że działało z wami wszystkimi, jednak nie działało to dla mnie, podczas gdy export LD_LIBRARY_PATH ....sposób działa !!
Księgowa م
105

Zachowaj poprzednią ścieżkę, nie zastępuj jej:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/custom/path/

Możesz dodać go do swojego ~ / .bashrc:

echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your/custom/path/' >> ~/.bashrc
Ariel Monaco
źródło
36

Dodaj

LD_LIBRARY_PATH = "/ path / you / want1: / path / you / want / 2"

do /etc/environment

Zobacz dokumentację Ubuntu .

KOREKTA: Powinienem skorzystać z własnej porady i faktycznie przeczytać dokumentację. Mówi, że nie dotyczy to LD_LIBRARY_PATH: Od Ubuntu 9.04 Jaunty Jackalope, LD_LIBRARY_PATH nie można ustawić w plikach $ HOME / .profile, / etc / profile ani / etc / environment. Musisz użyć plików konfiguracyjnych /etc/ld.so.conf.d/ .conf. * Tak więc odpowiedź user1824407 jest na miejscu.

MrUser
źródło
Wow, kilka razy przeglądałem tę stronę i przeoczyłem to. Dziękujemy za wykrycie go i zwrócenie naszej uwagi.
Michael Scheper,
4
Ubuntu jest tutaj szczególnym przypadkiem. Ubuntu uważa, że ​​wszyscy użytkownicy chcą tych samych bibliotek i że jest tylko jedno miejsce dla każdej biblioteki (przeczytaj dyskusję w błędzie Launchpad # 366728). Jednak w systemach badawczych lub programistycznych dla wielu użytkowników chcesz, aby każdy użytkownik mógł mieć własne wersje bibliotek. Większość dystrybucji Linuksa na to pozwala i robi to od wielu lat.
Joachim Wagner,
9
Spędziłem 4 godziny, próbując zrozumieć, dlaczego mogę ustawić PATH i PKG_CONFIG_PATH, ale nie LD_LIBRARY_PATH. Nawet nie umiem.
Michaił Cheshkov,
@ JoachimWagner Tak, to prawda i dlaczego conda i / lub bioconda lub virtenv jest obecnie preferowaną metodą wywoływania określonego programu ze specjalnymi zmiennymi środowiskowymi. Używając środowisk zamkniętych, nieumyślne ustawienie ścieżki LD_LIBRARY nie spowoduje problemów / problemów systemowych.
Andor Kiss,
23

Plik .bash_profilejest wykonywany tylko przez powłoki logowania. Może być konieczne włożenie go ~/.bashrclub wylogowanie i ponowne zalogowanie.

Jakiś programista, koleś
źródło
Dziękuję Joachim Pileborg. Uruchomiłem ponownie system i teraz jego ścieżka jest ustawiona na stałe.
singha
21

Alternatywnie możesz uruchomić program z określonym katalogiem biblioteki:

/lib/ld-linux.so.2 --library-path PATH EXECUTABLE

Przeczytaj więcej tutaj .

K15.Multik
źródło
2
Pomógł mi również
spt025
17

Z jakiegoś powodu nikt nie wspominał o tym, że po edycji bashrc wymaga ponownego zaopatrzenia. Możesz się wylogować i zalogować ponownie (jak wspomniano powyżej), ale możesz także użyć poleceń: source ~/.bashrclub . ~/.bashrc.

nbroeking
źródło
14

Umieścić export LD_LIBRARY_PATH=/usr/local/libw ~/.bashrc[najlepiej do końca scenariusza, aby uniknąć nadpisania pomiędzy, domyślna ~/.bashrcpochodzi z wielu if-elsewypowiedzi]

Opublikuj, że ilekroć otworzysz nowy terminal / konsolę, LD_LIBRARY_PATHzostanie odzwierciedlone

Anszul
źródło
Przepraszamy za brak wzmianki o dystrybucji. Jego Fedora 16
singha
7
  1. Przejdź do folderu domowego i edytuj .profile
  2. Umieść następujący wiersz na końcu

    export LD_LIBRARY_PATH=<your path>

  3. Zapisz i wyjdź.

  4. Wykonaj to polecenie

    sudo ldconfig

singingsingh
źródło
3

Wykonuję następujące czynności w mennicy od 15 do 17, działa również na serwerze Ubuntu 12.04 i nowszych:

sudo vi /etc/bash.bashrc 

przewiń w dół i dodaj:

export LD_LIBRARY_PATH=.

Wszyscy użytkownicy mają dodaną zmienną środowiskową.

Johnnyb
źródło
3

Możesz spróbować dodać niestandardowy skrypt, powiedzmy myenv_vars.shw /etc/profile.d.

cd /etc/profile.d
sudo touch myenv_vars.sh
sudo gedit myenv_vars.sh

Dodaj to do pustego pliku i zapisz.

export LD_LIBRARY_PATH=/usr/local/lib

Wylogowanie i logowanie LD_LIBRARY_PATHzostaną ustawione na stałe.

Methusael Murmu
źródło
1
Świetna odpowiedź. Najlepszy wybór dla mnie, aby wyeksportować ścieżkę za każdym razem podczas inicjalizacji systemu i jest znacznie bezpieczniejszy niż fizyczna edycja / etc / bashrc
Joseph