아래의FHS, 시스템 패키지(예: RPM)는 /usr/lib
(또는 /usr/lib64
)에 라이브러리를 설치합니다. 마찬가지로, configure;make;make install
시스템 배포의 일부가 아닌 이전 " " 루틴을 사용하여 컴파일된 라이브러리는 기본적으로 /usr/local/lib
(또는 /usr/local/lib64
)에 설치됩니다.
일반적으로 사용자에게 LD_LIBRARY_PATH를 변경하도록 요구하거나 사용자가 설치하는 응용 프로그램을 변경하도록 요구하는 것은 잘못된 형식으로 간주됩니다 ld.so.conf
. 예를 들면 다음을 참조하세요.
http://web.archive.org/web/20060719201954/http://www.visi.com/~barr/ldpath.html
하지만 /usr/local/lib
이 규칙에도 예외가 있어서는 안 될까요?
그렇다면 대부분의 배포판이 /usr/local/lib
기본적으로 라이브러리 검색 경로에 포함되지 않는 이유는 무엇입니까? 지금까지는 ArchLinux만이 이것을 버그로 간주한 것 같습니다.http://bugs.archlinux.org/task/20059?project=1&opened=2263
& 관련http://bbs.archlinux.org/viewtopic.php?id=99807
/usr/local/lib
RPATH에 포함하기 위해 라이브러리가 필요한 응용 프로그램에 더 적합합니까 /usr/local/lib
, 아니면 OS에 이미 해당 설정이 있을 것으로 예상합니까? 나는 RPATH에서 $ORIGIN을 기반으로 하지 않는 것을 사용한다는 생각을 싫어합니다.
이는 시스템 안정성과 소프트웨어 패키징 방법에 영향을 미치기 때문에 현학적인 문제가 아닙니다.
답변1
/usr/local/lib는 기본 경로에 있어야 하며 그렇지 않은 Red Hat과 같은 Linux 변종에서는 '버그'로 간주되어야 한다고 제안되었습니다.
이 답변https://stackoverflow.com/a/17653893 눈에 띄는 부분을 지적한다.http://linuxmafia.com/faq/Admin/ld-lib-path.html
많은 Red Hat 파생 배포판에는 일반적으로 /etc/ld.so.conf 파일에 /usr/local/lib가 포함되어 있지 않습니다. 나는 이것을 버그라고 생각하며 /etc/ld.so.conf에 /usr/local/lib를 추가하는 것은 Red Hat 파생 시스템에서 많은 프로그램을 실행하는 데 필요한 일반적인 ``수정''입니다.
저는 Red Hat에 이 문제를 제기했지만 지금은 이에 동의하지 않습니다.
Red Hat 제공 패키지는 공급업체가 /usr/local에 설치하는 시스템의 /usr/local에 설치되지 않습니다. 대답은 다릅니다. 해당 시스템에서는 /usr/local/lib가 기본 검색 경로에 있을 것으로 합리적으로 예상할 수 있습니다.
Red Hat은 추가된 라이브러리가 RPM 및 yum에 의해 선택될 수 있으므로 /usr/local/lib가 기본 검색 경로에 있어서는 안 된다는 점을 지적했습니다.
나는 이것을 더 조사했다. /usr/local/lib에 시스템 라이브러리의 자체 버전을 설치하면 일반적으로 RPM 또는 yum을 통해 설치하는 다른 시스템 패키지의 종속성을 충족할 수 있습니다. 분명히 이는 시스템 안정성에 영향을 미칠 수 있습니다. 더 나쁜 것은 아주 미묘하게 그렇게 할 것입니다. yum check는 필요한 모든 패키지의 모든 공급업체 버전이 있다고 보고할 수 있지만 /usr/local/lib에 중요한 버전이 있다는 것을 알지 못할 수도 있습니다.
다른 패키지 관리자를 사용하는 시스템에서는 이것이 적용되지 않을 수 있습니다.
RPATH에 무엇을 넣어야 할지에 대한 완전한 답변이 없습니다. 그러나 /usr/local/lib에 있는 라이브러리에 의존하는 것을 피하고 대신 가능하면 /opt(즉, 설치의 일부로 제어하는 위치)에 라이브러리를 설치해야 한다고 생각합니다.