지정된 라이브러리를 사용하여 프로그램 실행

지정된 라이브러리를 사용하여 프로그램 실행

시스템 변수를 검색하는 대신 프로그램이 사용해야 하는 라이브러리의 경로를 지정할 수 있습니까?

답변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.

관련 정보