LD_LIBRARY_PATH의 기본값은 무엇입니까? [복사]

LD_LIBRARY_PATH의 기본값은 무엇입니까? [복사]

내 경우에는 LD_LIBRARY_PATH빈 문자열로 설정된 것 같습니다. 그러나 모든 표준 시스템 도구는 여전히 잘 작동하므로 동적 링커가 이 경우를 확인하고 LD_LIBRARY_PATH이 경우 몇 가지 기본값을 사용하는 것 같습니다.

이 기본값은 무엇입니까? 최소한 포함되어 있는 것 같은데 /usr/lib그 외에는 무엇이 있나요? 동적 링커가 검색할 표준 위치를 결정하는 체계적이고 좋은 방법이 있습니까?

문제는 동적 링커가 검색할 경로와 약간 다릅니다. 기본값이 있다는 것은 주어진 경우 해당 값을 사용하고 LD_LIBRARY_PATH, 지정되지 않은 경우 기본값을 사용한다는 의미입니다. 즉, LD_LIBRARY_PATH제공된 경우 기본값을 사용하지 않는다는 의미입니다.

답변1

Linux의 일반적인 동적 링커는 캐시를 사용하여 라이브러리를 찾습니다. 캐시는 지정된 경로(현재 일반적으로 의 파일)를 찾아서 에 저장되고 /etc/ld.so.cache업데이트 됩니다. 를 실행하여 해당 내용을 나열할 수 있습니다.ldconfig/etc/ld.so.conf/etc/ld.so.conf.dldconfig -p

따라서 기본값이 없으며 LD_LIBRARY_PATH기본 라이브러리 조회에는 기본값이 전혀 필요하지 않습니다. 정의된 경우 LD_LIBRARY_PATH먼저 사용되지만 다른 조회(일부 기본 디렉터리도 포함)는 비활성화되지 않습니다.

이것ld.so(8)맨페이지세부 사항은 다음과 같습니다.

공유 라이브러리 종속성에 슬래시가 포함되어 있지 않으면 다음 순서로 검색됩니다.

  • DT_RPATHDT_RUNPATH존재하지만 속성이 존재하지 않는 경우 바이너리의 동적 섹션 속성에 지정된 디렉터리를 사용합니다 . DT_RPATH권장되지 않습니다.

  • 실행 파일이 안전 실행 모드(아래 참조)에서 실행되고 있지 않으면 환경 변수가 사용되며 LD_LIBRARY_PATH, 이 경우 무시됩니다.

  • DT_RUNPATH존재하는 경우 바이너리의 동적 부분 속성에 지정된 디렉터리를 사용합니다.

  • /etc/ld.so.cache이전에 향상 라이브러리 경로에서 발견된 후보 공유 객체의 컴파일된 목록이 포함된 캐시 파일에서 . 그러나 링커 옵션을 통해 바이너리가 -z nodeflib연결된 경우 기본 경로의 공유 개체는 건너뜁니다. 하드웨어 기능 디렉터리(아래 참조)에 설치된 공유 개체는 다른 공유 개체보다 우선합니다.

  • 기본 경로 아래 /lib에서 /usr/lib. (일부 64비트 아키텍처에서 64비트 공유 객체의 기본 경로는 /lib64이고 그 다음은 입니다.) 링커 옵션을 사용하여 /usr/lib64바이너리가 링크된 경우 이 단계를 건너뜁니다 .-z nodeflib

LD_LIBRARY_PATH설정되지 않았거나 비어 있는 경우무시당하다. 공백으로 설정한 경우가치( LD_LIBRARY_PATH=:예를 들어) 이러한 null 값은현재 디렉토리로 해석됨.

관련 정보