필요한 모든 종속성과 함께 디렉터리에 애플리케이션을 배포합니다. 우리 애플리케이션은 LD_LIBRARY_PATH를 이 위치로 설정합니다. 일부 라이브러리(예: OpenSSL)는 시스템 위치에도 있습니다. 실제로 애플리케이션 디렉토리에서 이러한 공유 객체를 삭제하면 애플리케이션은 가능한 모든 재난(예: 잘못된 버전)에도 불구하고 계속 실행됩니다. 차라리 애플리케이션 디렉토리에서 공유 객체를 삭제하면 공유 객체를 찾을 수 없다는 경고를 표시하고 싶습니다.
LD_LIBRARY_PATH에서 특정 객체만 찾도록 동적 로더의 검색 경로를 재설정할 수 있습니까?
답변1
런타임에 시스템 경로가 라이브러리를 검색하는 것을 막을 수는 없을 것 같지만 ld.so 매뉴얼 페이지에 따르면 -z nodeflib
동적 링커를 사용하여 바이너리를 링크하면 시스템 라이브러리 경로가 검색되지 않습니다. ld에 대한 매뉴얼 페이지에는 이것이 표시되지 않으므로 이것이 실제로 지원되는지는 알 수 없습니다.
또 다른 아이디어: docker와 같은 컨테이너 시스템을 사용해 보세요. 이는 경량 가상 머신과 유사하며 호스트와 별도로 파일 시스템에 대한 고유한 보기를 가질 수 있으며 필요한 라이브러리 버전을 컨테이너에 넣을 수 있습니다. JVM/Python 버전 등과 같은 공유 라이브러리 이외의 것에서도 작동합니다. 나는 그것을 많이 사용하지 않았지만 이러한 유형의 응용 프로그램에 완벽하다는 것을 이해했습니다.