소프트웨어 구축 시 종속성 문제 [닫기]

소프트웨어 구축 시 종속성 문제 [닫기]

제3자가 제공한 소스 코드에서 바이너리를 빌드할 때 거의 항상 종속성 버전에 문제가 있습니다.

저는 주로 Debian(때때로 Ubuntu)을 사용하는데 저장소에는 하나 또는 두 개의 주요 릴리스만 있으므로 소스 코드에 필요한 버전을 얻을 수 없습니다.

일반적으로 다음 중 하나를 수행합니다.

  • apt-get필요한 버전을 얻을 수 있었습니다(드물게)

  • sources.list해당 패키지 하나만 변경 하고 업데이트합니다. (이로 인해 다른 패키지와 해당 종속성이 손상되는 것 같습니다.)

  • 실행 dist-upgrade(이전 종속성이 새 종속성으로 대체되었기 때문에 이전에 컴파일한 소프트웨어가 작동을 멈췄습니다.)

  • 타사 웹사이트에서 직접 적성 없이 종속 항목을 설치해 보세요.

예 를 들어 소스 요구 사항을 예로 들면 g++5Debian Jessie의 저장소나 공유 라이브러리 설치에는 4개만 있습니다 libboost.

현재 배포판에 적성 소스를 사용할 수 없는 경우 종속성을 관리하는 가장 좋은 방법은 무엇입니까?

답변1

핵심요약: /usr/local자체 소프트웨어를 사용하거나 백포트하고 패키징하세요.

일반적인 것부터 시작하겠습니다. 분포는 일관된 단위입니다. 분명히 그것은 합리적인 범위 내에서 사용자가 그 위에 무엇을 하고 싶어하는지 지원하기 위해 존재합니다(항목 4 참조).데비안 사회 계약), 하지만 먼저 자체적으로 지원해야 합니다. 특히 라이브러리는 배포판의 다른 소프트웨어에 종속되어 있고 패키지 -dev(또는 develRPM 측의 리더)가 빌드될 수 있기 때문에 포함됩니다. 패키지 소프트웨어는 사용합니다. 분포. 배포판 위에 소프트웨어를 구축할 때 배포판에 포함된 라이브러리가 요구 사항을 충족한다면 매우 좋으며 이를 사용하는 것이 좋습니다. 그러나 그렇지 않은 경우 업그레이드하기 위해 배포판을 조정하는 것을 피해야 합니다. .

일부 개발 환경에서는 이미 이를 처리하고 있습니다. Python에는 가상 환경이 있고 Ruby에는 비슷한 환경이 있으며 Java 및 NPM은 자체 프로젝트별 종속성 트리를 관리하는 등의 작업을 수행합니다. C/C++ 생태계에는 실제로 이와 같은 것이 없습니다. 단 /usr/local, 컴파일러가 너무 오래된 경우를 포함하여 많은 경우에 이것이 매우 적합할 수 있습니다.

실제로 C/C++ 생태계에는 몇 가지 실현 가능한 솔루션이 있습니다.

  • 최첨단 기술이 필요하다면 "불안정한" 시스템으로 개발할 수 있습니다. 완전한 시스템일 필요는 없습니다(데비안의 다음 버전 개발을 돕고자 하는 경우에만 이 작업을 수행해야 합니다). chroot는 이에 대해 훌륭하게 작동합니다. 또한 "불안정"은 시스템이 아니라 ABI 안정성을 나타냅니다. 전반적인 안정성.

  • 자신의 종속성을 수동으로 관리하려면 다음 /usr/local을 확인하세요.집어 챙겨 넣다관리 버전).

  • 몇 가지 업그레이드된 종속성이 필요한 경우 다음을 사용하는 것이 좋습니다.백포트.이 답변백포트를 설치하는 방법이나 직접 빌드하는 방법에 대해 설명합니다. 이를 통해 현재 안정 버전보다 최신 버전의 패키지를 안전한 방식으로 계속 사용할 수 있습니다. 이는 확장성이 뛰어나며 많은 조직이 내부적으로 백포트된 패키지의 자체 저장소를 유지 관리합니다.

가장 중요한 것은 구축 중인 소프트웨어를 패키징하는 방법을 배우는 것이 가치가 있다는 것입니다. 그렇게 하면 배포판 도구가 종속성을 계속 사용할 수 있도록 하는 데 도움이 되며, 이는 소프트웨어를 다른 시스템에 설치할 때나 업그레이드할 때 유용합니다. 빈센트 베르나 대단해요실용적인 데비안 패키징기술은 여러분이 목표에 빠르게 도달하는 데 도움이 될 것입니다.

관련 정보