2013-02-16 3 views
0

동일한 SONAME 및 인터페이스를 가진 2 개의 라이브러리 (A와 B)가 있다고 가정 해보십시오. 개발자는 컴파일 할 때 A와 연결되지만 사용자는 실행 전에 $ LD_LIBRARY_PATH를 설정합니다. 모든 것은 정상이지만 사용자가 개발자가 원하는 것과 다른 라이브러리를 사용했다는 것을 모릅니다.LD_LIBRARY_PATH가 연결과 실행 사이에서 변경되었습니다.

나는 편집자이며, 단지 해킹이 아니므로 피해야한다. 컴파일러에 "-Wl, -rpath"를 제공하면 런타임 연결 경로의 우선 순위가 결정되지만 소프트웨어 개발에서 가장 "표준"인 전략이 무엇인지 확실하지 않습니다.

답변

1

사용자가 LD_LIBRARY_PATH를 설정하면 다른 라이브러리를 얻을 것을 의미합니다. LD_LIBRARY_PATH를 처음부터 설정하는 이유입니다. 기본 라이브러리를 원한다면 해당 env var를 설정하지 않았을 것입니다. "나는 내가하고있는 일을 안다. 나는 나의 이유가있다."

실제 질문에 대답하는 경우 rpath는 표준 방법이며 많은 라이브러리가이를 사용하거나 빌드 타임 구성 옵션으로 제공합니다. 그래도 LD_LIBRARY_PATH를 재정의 했습니까? AFAIK, 그렇지 않습니다. 그리고 그것은 사용자가 기본 라이브러리 검색 경로를 변경할 수있는 방법을 남겨놓지 않기로되어 있습니다.

관련 문제