운영 체제마다 OS X에서 패키지 종속성을 설치하는 표준 방법이 다르므로 모든 라이브러리 종속성이 이 App
폴더에 복사됩니다.
Windows 응용 프로그램 개발자에게는 두 가지 옵션이 있습니다. 라이브러리를 하위 패키지로 설치할 수 있습니다. 예를 들어 게임 설치 프로그램은 directX 라이브러리를 설치합니다. 그러나 일반적으로 사용자는 시스템에 대한 종속성을 복사할지 아니면 공유할지 선택할 수 있는 옵션이 없습니다.
Linux에서는 패키지 관리자(예: apt-get
)가 종속성을 반복적으로 해결하고 시스템 전체에 설치합니다. 물론 애플리케이션이 여전히 동일한 소스 라이브러리의 다른 버전을 사용할 수 있으므로 중복 종속성 문제가 반드시 해결되는 것은 아닙니다.
예를 들어, 일부 응용 프로그램에서는 이를 필요 libboost-filesystem1.42
로 하지만 젠장, libboost-filesystem-1.49를 사용할 수 있지만 패키지 파서가 이미 libboost-filesystem-1.49를 가지고 있는지 파악할 수 없기 때문에 도움이 되지 않습니다.
반면에 이미 다른 버전이 있기 때문에 시스템 전체 경로에 이전 라이브러리를 설치하고 싶지 않습니다.
질문:App
특정 응용 프로그램 종속성이 응용 프로그램별 폴더(예: Mac OS X의 폴더) 에 설치되도록 허용하는 표준 패키지 관리자 옵션이 있습니까 ?
답변1
당신은 틀렸습니다. "이전" 라이브러리는 원하는 동작인 시스템 전체 경로에 설치됩니다. 작동 방식은 다음과 같습니다. 두 라이브러리 버전이 바이너리 수준에서 호환되는 경우 하나만 설치하면 해당 버전을 사용하는 모든 응용 프로그램이 동일한 라이브러리 파일을 사용합니다. 두 라이브러리 버전이 바이너리 수준에서 호환되지 않는 경우 각각 고유한 이름을 가진 여러 복사본을 설치하고 다른 버전의 라이브러리가 필요한 응용 프로그램은 적절한 라이브러리 파일을 사용합니다.
예를 들어, libboost-filesystem-1.49
(에 /usr/lib/libboost_filesystem.so.1.49.0
) 설치한 경우 바이너리가 호환되지 않기 때문에 버전 1.42.0이 필요한 애플리케이션에는 도움이 되지 않습니다. 애플리케이션에는 가 필요합니다 /usr/lib/libboost_filesystem.so.1.42.0
. 애플리케이션을 설치하면 패키지 관리자가 필요한 버전의 라이브러리를 자동으로 설치합니다. 1.42가 필요한 애플리케이션과 1.49가 필요한 애플리케이션이 있는 경우 에는 서로 다른 두 버전의 라이브러리가 있으며 /usr/lib
각각 고유한 파일 이름을 사용하여 평화롭게 공존할 수 있습니다. 요즘 대부분의 패키지 관리자는 애플리케이션에서 더 이상 사용하지 않는 라이브러리 버전을 자동으로 제거할 수도 있습니다.
응용 프로그램 디렉터리에 라이브러리를 설치하는 것은 좋은 패키지 관리 및 배포 채널이 없는 운영 체제의 종속성을 처리하는 가난한 사람의 방법입니다. 작업을 원활하게 수행하기 위해 애플리케이션에 필요한 모든 라이브러리를 애플리케이션 자체와 함께 묶습니다. 즉, 동일한 라이브러리 버전의 복사본이 여러 개 있게 되며 라이브러리를 업그레이드하는 쉬운 방법이 없습니다. 결국 동일한 라이브러리의 오래된 복사본이 여러 개 있게 됩니다.
패키지 관리자가 있다는 것은 그렇게 할 필요가 없다는 것을 의미하므로 응용 프로그램 디렉터리에 라이브러리를 설치하는 옵션이 있고 앞으로도 없을 것입니다.