시스템 변수를 검색하는 대신 프로그램이 사용해야 하는 라이브러리의 경로를 지정할 수 있습니까?
답변1
여기에는 몇 가지 옵션이 있습니다. 가장 일반적인 것은
LD_LIBRARY_PATH=/custom/path:$LD_LIBRARY_PATH ./yourprogram
둘째, 약간 더 강력합니다.
LD_PRELOAD=/custom/path/lib.so ./yourprogram
첫 번째는 검색 목록에서 경로를 먼저 입력하는 것입니다. 두 번째는 다른 라이브러리를 로드하기 전에 라이브러리를 로드합니다. 기본 검색 경로를 완전히 제거하지도 않습니다. 동적으로 로드된 모든 라이브러리를 교체하려는 것이 아니라면 괜찮을 것입니다.
자신만의 프로그램을 컴파일하는 경우 더 많은 옵션이 있습니다. 정적으로 링크하거나( .a
라이브러리 전체 또는 일부만) 런타임 검색 경로를 설정할 수 있습니다. 이를 수행하기 위한 옵션은 컴파일러에 따라 다를 수 있습니다.
댓글 추가:
빈 경로를 추가하는 것이 걱정된다면 LD_LIBRARY_PATH
다음을 사용할 수 있습니다 .
LD_LIBRARY_PATH=/custom_path${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} ./myprogram
일회성 명령의 경우 조금 더 복잡하지만 전체적으로는 더 안전합니다. 이 점을 지적한 Stephen Kitt에게 감사드립니다.
답변2
라이브러리를 미리 로드하면 동적 링커는 다른 라이브러리를 찾기 전에 해당 라이브러리를 사용하여 기호를 바인딩합니다.
LD_PRELOAD=/path/to/library.so program
다음 방법으로 사전 확인하실 수 있습니다 ldd
:
LD_PRELOAD=/path/to/library.so ldd program
성공하면 /path/to/library.so
요청한 시스템 라이브러리 대신 출력이 표시 됩니다 program
.