Programming

LD_LIBRARY_PATH 및 LIBRARY_PATH

procodes 2020. 6. 18. 22:13
반응형

LD_LIBRARY_PATH 및 LIBRARY_PATH


간단한 C ++ 프로그램을 작성 중이며 개발 및 테스트를 위해 시스템 제공 공유 라이브러리를 최신 버전으로 일시적으로 대체하고 싶습니다.

LD_LIBRARY_PATH 변수 설정을 시도했지만 링커 (ld)가 실패했습니다.

/ usr / bin / ld : -lyaml-cpp를 찾을 수 없습니다

ld man 페이지에 따르면 작동 할 것으로 예상했습니다.

링커는 다음 검색 경로를 사용하여 필요한 공유 라이브러리를 찾습니다. ... 기본 링커의 경우 환경 변수 "LD_LIBRARY_PATH"의 내용 ...

그런 다음 LIBRARY_PATH 설정을 시도했지만 작동했습니다.

GCC 매뉴얼에 따르면 :

LIBRARY_PATH의 값은 PATH와 같이 콜론으로 구분 된 디렉토리 목록입니다. 네이티브 컴파일러로 구성 될 때 GCC는 GCC_EXEC_PREFIX를 사용하여 찾을 수없는 경우 특수 링커 파일을 검색 할 때 지정된 디렉토리를 시도합니다. GCC를 사용한 링크는 또한 -l 옵션에 대한 일반 라이브러리를 검색 할 때 이러한 디렉토리를 사용합니다 (그러나 -L로 지정된 디렉토리가 우선 함).

(GCC) 매뉴얼에서 알 수 있듯이 LIBRARY_PATH는 GCC와 연결되어 있기 때문에 작동합니다.

그러나..

  • 오류 메시지에서 알 수 있듯이 gcc와 ld가 호출되는 이유는 무엇입니까?
  • 동일한 목적을 달성하는 두 변수를 갖는 점은 무엇입니까? 다른 차이점이 있습니까?

LIBRARY_PATH 컴파일하기 전에 gcc가 프로그램에 링크해야하는 정적 라이브러리와 공유 라이브러리를 포함하는 디렉토리를 검색하기 위해 gcc에서 사용합니다.

LD_LIBRARY_PATH프로그램 이 성공적으로 컴파일 및 링크 된 후 공유 라이브러리를 포함하는 디렉토리를 검색하는 데 사용됩니다 .

편집 : 아래에서 지적했듯이 라이브러리는 정적이거나 공유 될 수 있습니다. 정적 인 경우 코드가 프로그램으로 복사되므로 프로그램을 컴파일하고 링크 한 후 라이브러리를 검색 할 필요가 없습니다. 라이브러리가 공유되면 프로그램에 동적으로 연결되어야하며 그 시점 LD_LIBRARY_PATH이 시작됩니다.


LD_LIBRARY_PATH프로그램이 시작될 때 LIBRARY_PATH검색되고 링크 타임에 검색됩니다.

의견 에서주의 :


오류 메시지에서 알 수 있듯이 gcc와 ld가 호출되는 이유는 무엇입니까?

gcc는 연결 모드에있을 때 내부적으로 ld를 호출합니다.

참고 URL : https://stackoverflow.com/questions/4250624/ld-library-path-vs-library-path

반응형