Linux의 소스 코드에서 애플리케이션을 빌드할 때마다 운영 체제(ubuntu)에 종속성 라이브러리를 설치해야 합니다.
일반적인 시나리오:
./configure 시작 중 라이브러리 누락에 대한 오류가 발생했습니다. xyz sudo apt-get install libxyz-dev 1단계로 이동하세요. 마지막으로 운영 체제가 엉망이 되어 종속성 문제가 발생했습니다. 예를 들어:
다음 패키지에는 충족되지 않은 종속성이 있습니다.
librsvg2-dev : Depends: libglib2.0-dev (>= 2.12.0) but it is not going to be installed
Depends: libgdk-pixbuf2.0-dev (>= 2.21.6) but it is not going to be installed
Depends: libcairo2-dev (>= 1.2.0) but it is not going to be installed
Depends: libgtk2.0-dev (>= 2.21.5) but it is not going to be installed
지금 무엇을 하고 있는지 항상 스스로에게 물어보세요. 우분투에서 더 높은 버전의 라이브러리를 설치하도록 강제해야 합니까?
내 질문은 다음과 같습니다.
어쩌면 리눅스(우분투)의 소스에서 소프트웨어를 빌드하는 또 다른 방법이 있을 수도 있습니다. 격리하는 몇 가지 방법. 내 운영 체제에 통합되지 않았나요? 저는 자바 세계에서 왔으며 그곳에서 애플리케이션을 구축하고 있습니다! =시스템의 모든 종속성을 설치합니다. 어떤 제안이 있으십니까? 모범 사례?
답변1
여기에는 두 가지 이상의 질문이 있습니다. 가장 중요한 것은 처리 방법이라고 생각합니다."하지만 설치되지는 않습니다." 이에 대한 답은 없지만, 어느 시점에서 좌절감을 느끼고 무언가를 강제로 설치했기 때문에 이런 일이 발생한다면 속도를 늦추고 주의를 기울이는 법을 배워야 한다고 말할 수 있습니다.세부. 단순히 "나는 엉망이 되었다"고 말하는 것은 많은 것을 의미하지 않습니다.
저는 10년 넘게 Linux에서 소스를 빌드해 왔으며 배포판의 패키지 관리자에 문제가 거의 없습니다. 일부 소스 패키저는 종속성을 제대로 표시하지 않거나 .configure
올바르게 수행하지 않아 큰 문제가 될 수 있지만 배포 바이너리에 "충족되지 않은 종속성" 문제가 발생해서는 안 됩니다. 배포판의 설치 프로그램.
예를 들어:
librsvg2-dev : Depends: libglib2.0-dev (>= 2.12.0)
2.12는 매우 오래된 버전입니다. 온라인에서 버전 기록을 찾을 수 없지만 약 10년 정도 된 것 같습니다. 이보다 오래된 glib를 사용하는 우분투 버전은 사용할 수 없습니다. 따라서 패키지 관리에 문제가 있습니다.
이는 소스 코드 빌드 프로세스와 거의 관련이 없습니다.
나는 자바 세계에서 왔고...
이것이 바로 C/C++의 세계입니다. Java는 더 모놀리식이고 독립적이므로 일부 작업이 더 쉬워지지만 몇 가지 절충안이 있습니다. C/C++에는 그 자체로 몇 가지 장점이 있다는 점을 기억하세요.
답변2
Java는 이미 가상 머신에 있는 대부분의 라이브러리와 함께 제공되며 때로는 Java 프로그램에 jar로 패키지된 외부 라이브러리가 포함되어 있는 경우도 있습니다. 그러나 동일한 라이브러리에 많은 프로그램이 번들로 포함되어 있으면 많은 공간을 낭비하게 됩니다.
Java 자체는 많은 종속성을 도입하고 소프트웨어에 필요한 모든 것을 제공합니다. 나는 종종 Java를 다양한 운영 체제 라이브러리의 기능을 통합하는 래퍼로 생각합니다. 그러나 이것은 전적으로 사실이 아니며 Java는 훨씬 더 많은 것을 제공합니다.
소스에서 소프트웨어의 모든 부분을 컴파일하고, 종속성을 처리하고, 필요할 때 설치하고, 더 이상 필요하지 않을 때 제거하는 훌륭한 패키지 관리자가 있습니다. 하지만 Portage는 Gentoo Linux의 핵심이고 다른 패키지 관리자와 함께 사용할 수는 있지만 실제로 얼마나 잘 작동하는지 경험이 없습니다.
당신은 볼 수 있습니다젠투 접두사Gentoo 자체가 아닌 다른 운영 체제에 Portage를 가져오는 것은 쉽지 않을 수 있으며 확실히 매우 실험적이며 모든 것을 망칠 수 있다는 점을 경고해야 합니다.