Linux가 중앙 저장소에서 여러 버전을 허용하지 않는 이유는 무엇입니까?

Linux가 중앙 저장소에서 여러 버전을 허용하지 않는 이유는 무엇입니까?

제 생각에는 Linux의 많은 문제는 종속성 불일치로 인해 발생합니다. 특히 두 가지 버전의 라이브러리를 설치할 수 없습니다.

따라서 프로그램 A에 "lib1.2"가 필요하고 프로그램 B에 "lib1.3"이 필요한 경우 함께 실행할 수 없습니다.

질문:

  1. 그렇죠?
  2. 중앙 저장소가 lib1.2와 lib1.3을 모두 지원하고 프로그램이 요청한 버전을 얻을 수 있는 이유는 무엇입니까?

답변1

대부분의 Linux 배포판에서는 시스템에 여러 버전의 라이브러리가 있는 것이 문제가 되지 않습니다. 즉, 서로 다른 버전의 공유 라이브러리를 갖는 것입니다.소네임/usr/lib동일한 디렉터리에 공존할 수 있습니다 . 또한 올바른 패키지 이름을 지정하여 이러한 라이브러리를 여러 개 설치하도록 패키지 관리자에게 지시할 수 있습니다.

apt-get install libjpeg7
apt-get install libjpeg8

실제로 이 시스템에는 두 가지 함정이 발생할 수 있습니다.

  1. 대부분의 배포판은 공간을 절약하기 위해 릴리스당 하나의 라이브러리 버전만 제공합니다. 예를 들어 Debian Wheezy만 있습니다 . 소스에서 특정 라이브러리 버전(예:)을 libjpeg8계속 설치할 수 있으며 문제 없이 다른 버전과 공존할 수 있습니다. libjpeg7다른 배포판에서 패키지를 설치해 볼 수도 있지만 많은 종속성이 발생할 수 있으므로 주의하세요.

  2. 때로는 동일한 이름(호환성을 의미)을 가진 두 개의 라이브러리 버전이 일부 프로그램에서는 작동하지만 다른 프로그램에서는 작동하지 않는 경우가 있습니다. 그건 그렇고, 이것이 애초에 여러 버전의 배포판을 갖는 주된 이유입니다. 이 경우 해결책은 호환되지 않는 라이브러리를 외부에 유지 /usr/lib하고 LD_LIBRARY_PATH 또는 chroot를 통해 특정 프로그램에 액세스할 수 있도록 하는 것입니다.

답변2

짧은 답변:

  1. 아니요.
  2. 일부 배포판의 경우 이에 해당됩니다.

더 긴 답변:

Linux는 배포판이 아니라 커널입니다. 다음과 같은 배포판을 사용하는 경우닉 OS, 동일한 라이브러리의 여러 버전을 동시에 설치하는 것은 쉽습니다.

답변3

RE: "Windows에서는 본 적이 없음"에 대한 귀하의 의견

Windows에서는 거의 모든 프로그램이 사용하는 기본 라이브러리의 추가 복사본을 자체 디렉터리에 설치하므로 결국 동일한 라이브러리의 복사본 수십 개가 설치되기 때문에 이를 방지합니다. 이것이 setup.exe바로 Direct X, Dot Net 또는 Visual C와 같은 동일한 라이브러리를 다시 설치하는 유사한 설치 프로그램을 자주 보는 이유입니다 .

Windows는 Linux가 버전이 지정된 공유 라이브러리를 지원하는 방식과 유사하게 버전이 지정된 DLL을 지원하지만 Microsoft는 응용 프로그램 개발자가 소프트웨어가 의존하는 특정 버전을 응용 프로그램에 포함하도록 권장합니다. 이는 인터넷 시대 이전에 필요했을 수 있습니다. 이것이 필요할 수도 있습니다. 사용자는 중요한 라이브러리의 복사본을 얻습니다.

Linux에서도 동일한 작업을 수행하는 것이 가능하지만 a) 낭비적이고 게으르기 때문에 권장되지 않습니다(응용 프로그램 개발자 및 라이브러리 개발자의 경우). b) 기본적으로 Linux는 해당 작업의 프로그램 디렉터리와 동일한 방식으로 수행하지 않습니다. 공유 라이브러리 - LD_LIBRARY_PATH에 지정된 디렉터리에서만 찾습니다. 일부 프로그램에는 바이너리 실행 파일을 실행하기 전에 LD_LIBRARY_PATH를 변경할 수 있는 쉘 스크립트 래퍼가 함께 제공됩니다.

관련 정보