Ścieżka biblioteki LD vs ścieżka biblioteki

Buduję prosty program C++ i chcę tymczasowo zastąpić dostarczoną przez system bibliotekę współdzieloną nowszą jej wersją, do rozwoju i testowania.

Próbowałem ustawić zmienną LD_LIBRARY_PATH, ale linker (ld) nie powiódł się z:

/ usr / bin/ ld: cannot find-lyaml-cpp

Spodziewałem się, że to zadziała, ponieważ według strony podręcznika LD:

Linker używa następującego wyszukiwania ścieżki do zlokalizowania wymaganych współdzielonych biblioteki: ... Dla native linkera, zawartość zmiennej środowiskowej "LD_LIBRARY_PATH"...

Potem próbowałem ustawić LIBRARY_PATH i to zadziałało.

Zgodnie z instrukcją GCC:

Wartość LIBRARY_PATH jest listą rozdzieloną dwukropkami katalogów, podobnie jak PATH. Kiedy skonfigurowany jako natywny kompilator, GCC próbuje katalogów podanych w ten sposób podczas wyszukiwania specjalnego linkera plików, jeśli nie może ich znaleźć za pomocą GCC_EXEC_PREFIX. Łączenie za pomocą GCC używa również tych katalogów, gdy wyszukiwanie zwykłych bibliotek dla opcja-l (ale katalogi podane za pomocą-l come first).

Jak sugeruje Instrukcja (GCC), LIBRARY_PATH działa, ponieważ łączę się z GCC.

Ale..

  • skoro Łączę z gcc dlaczego ld jest wywołanie, jako komunikat o błędzie sugeruje?
  • jaki jest sens posiadanie dwóch zmiennych obsługujących to samo cel? Czy są jakieś inne różnice?
 120
Author: Georgios Politis, 2010-11-23

3 answers

LIBRARY_PATH jest używany przez gcc przed kompilacją do przeszukiwania katalogów zawierających Statyczne biblioteki, które muszą być połączone z Twoim programem.

LD_LIBRARY_PATH jest używany przez program do przeszukiwania katalogów zawierających biblioteki shared Po pomyślnym skompilowaniu i połączeniu.

Edytuj: Jak wskazano poniżej, twoje biblioteki mogą być statyczne lub współdzielone. Jeśli jest Statyczny, to kod jest kopiowany do twojego programu i nie musisz szukać biblioteki po twoim program jest kompilowany i linkowany. Jeśli twoja Biblioteka jest współdzielona, musi być dynamicznie połączona z Twoim programem i wtedy LD_LIBRARY_PATH wchodzi w grę.

 170
Author: Naveen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-23 21:08:26

LD_LIBRARY_PATH jest wyszukiwany po uruchomieniu programu, {[1] } jest wyszukiwany w czasie połączenia.

Zastrzeżenie z komentarze :

 33
Author: F'x,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-27 15:09:53

Ponieważ łącze z gcc dlaczego LD jest wywoływany, jak sugeruje komunikat o błędzie?

Gcc wywołuje LD wewnętrznie, gdy jest w trybie łączenia.

 10
Author: heroxbd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-02 00:36:44