Tworzę prosty program w C ++ i chcę tymczasowo zastąpić udostępnianą przez system bibliotekę współdzieloną jej nowszą wersją, na potrzeby programowania i testowania.
Próbowałem ustawić zmienną LD_LIBRARY_PATH, ale linker (ld) nie powiódł się z:
/ usr / bin / ld: nie można znaleźć -lyaml-cpp
Spodziewałem się, że to zadziała, ponieważ zgodnie ze stroną podręcznika ld:
Konsolidator używa następujących ścieżek wyszukiwania do zlokalizowania wymaganych bibliotek współdzielonych: ... W przypadku konsolidatora natywnego zawartość zmiennej środowiskowej „LD_LIBRARY_PATH” ...
Następnie spróbowałem ustawić LIBRARY_PATH i zadziałało.
Zgodnie z instrukcją GCC:
Wartość LIBRARY_PATH to rozdzielona dwukropkami lista katalogów, podobnie jak PATH. Po skonfigurowaniu jako natywny kompilator, GCC próbuje katalogów określonych w ten sposób podczas wyszukiwania specjalnych plików konsolidatora, jeśli nie może ich znaleźć za pomocą GCC_EXEC_PREFIX. Łączenie za pomocą GCC również używa tych katalogów podczas wyszukiwania zwykłych bibliotek dla opcji -l (ale katalogi określone przez -L są pierwsze).
Jak sugeruje podręcznik (GCC), LIBRARY_PATH działa, ponieważ łączę się z GCC.
Ale..
- Skoro łączę się z gcc, dlaczego jest wywoływane ld, jak sugeruje komunikat o błędzie?
- Jaki jest sens posiadania dwóch zmiennych w tym samym celu? Czy są jakieś inne różnice?