맞춤형 개발 환경 구축

맞춤형 개발 환경 구축

저는 주로 교육 목적, 즉 빌드 프로세스 자체뿐만 아니라 개발/디버깅을 위한 시스템을 구축하고 있습니다.

이것이 내가 달성하고 싶은 것입니다.

  1. 시스템 툴체인과 완전히 독립적인 툴체인을 설치합니다.

    1.1. GCC(C, C++)가 필요합니다. 나는 운영 체제에서 컴파일러를 분리하고(예: 필요하다고 판단되는 경우 업그레이드) 디버그/릴리스용 디버그 기호 및 소스 코드를 사용하여 libstdc++를 빌드할 수 있기를 원합니다. "격리"는 또한 GCC가 일반적인 하드코딩된 경로를 포함하지 않기를 원한다는 것을 의미합니다. 현재 시스템 GCC는 5.1.1이고, 5.2.0을 빌드하겠습니다.

    1.2 위와 같은 두 가지 이유 때문에 libc/glibc가 좋은 선택이 될 것입니다. 바람직합니까? 아마도 내 시스템에 설치된 것과 동일한 버전을 사용할 것입니다.

    1.3.메이크/binutils. 어떤 요구사항/제안사항이 있나요? 아마도 내 시스템에 설치된 것과 동일한 버전을 사용할 것입니다.

  2. 다음과 같이 소스에서 더 자주 사용하는 라이브러리/도구 중 일부를 빌드합니다.

    2.1.지쿠

    2.2.중환자실

    2.3. 개방형 SSL

    2.4.홍보

    2.5.Qt

    등.

나는 모든 디버그 기호와 소스 코드를 사용하여 소스(예: Boost -> ICU)에서 빌드된 다른 종속성의 디버그/릴리스 빌드와 연결된 각 버전의 디버그/릴리스 빌드를 빌드하는 것을 좋아하기 때문에 다시 소스에서 빌드합니다. 또한 저는 다양한 구성 옵션을 실험하는 것을 좋아하기 때문입니다.

  1. 다른 라이브러리/도구의 경우 시스템 저장소의 패키지를 사용하세요.

    3.1. 여기에는 위에서 언급한 라이브러리(예: libxbc, libgstreamer 또는 Qt용 dbus)에 대한 요구 사항이 포함됩니다.

  2. 루트 액세스 권한이 있지만(VirtualBox의 Fedora VM) 이를 사용하고 싶지 않습니다.

나는 본 적이처음부터 리눅스그리고 내가 하려는 작업에 대한 유용한 정보가 많이 있지만 "호스트" 시스템과 완전히 분리된 것을 원하지 않는다는 점에서 근본적인 차이점이 있다고 생각합니다. 내 도구/라이브러리가 항상 시스템보다 먼저 설치 경로를 검색하도록 하고 그렇지 않으면 저장소에서 설치된 다른 모든 항목에 액세스할 수 있기를 원합니다. 또한 시스템 도구(예: GCC/binutils)와 라이브러리(시스템은 내 것이 아닌 자체 libc 또는 OpenSSL을 사용해야 한다고 생각합니다)를 제거하고 싶지 않습니다. 시스템이 무언가를 구축해야 하는 경우 내 도구/라이브러리를 찾지 않아야 합니다.

  1. 내 질문.

    5.1 위의 1.3에서 언급한 것처럼 시스템의 make/binutils를 사용해야 합니까, 아니면 소스에서 직접 구축해야 합니까?

    5.2 "호스트" 시스템에 액세스해야 한다면 chroot 환경이 실현 가능하거나 이상적입니까?

    5.3. 이 작업을 시작하기 전에 조사해야 할 사항이 더 있나요?

제가 조금 얕다는 건 인정하지만, 늘 그렇게 모든 것을 배웠기 때문에 문제가 되지는 않습니다.

관련 문서에 대한 도움/제안/포인터를 환영합니다.

Cas의 답변을 해결하기 위해 편집되었습니다.

내 목표는 최첨단이 아니라 디버그 빌드를 제어하는 ​​것입니다. --enable-libstdcxx-debugFedora 저장소(GCC 구성을 통해 얻음)에서 libstdc++의 디버그(최적화되지 않은) 버전을 찾을 수 없습니다 . 패키지에 넣으면 소스에서 GCC를 빌드할 필요가 없습니다.

그리고 빌드 프로세스와 시스템 구성 요소와의 상호 작용에 대해 더 많이 배우는 것은 보너스였지만 제가 정말로 원했던 것은 GDB, 기호 로딩, 최적화된 코드와 최적화되지 않은 코드 디버깅을 시험해 보는 것이었습니다. 이것이 바로 최적화되지 않은 버전의 라이브러리를 갖고 싶은 이유입니다.

나는 문제에 동의합니다. 당신이 언급한 "일반적인" 방식을 따랐던 이전 두 번의 시도에서는 Qt(소스에서 빌드할 것으로 예상되는 가장 복잡한 소프트웨어)를 빌드할 때 예외 오류가 발생했으며 "시스템 도구 체인"을 사용하여 빌드할 때도 Everything이 발생했습니다. 원활하게 진행되고 있습니다. 그렇기 때문에 소스에서 전체 시스템을 구축하지 않고도 내가 원하는 것을 더 철저하게 수행할 수 있는 더 좋은 방법이 있을 것이라고 생각했습니다.

소스에서 모든 것을 빌드할 필요가 없고 소프트웨어 버전에 대한 요구 사항이 없다면 다른 배포판으로 이동할 수 있습니다. 즉, 차이를 최소화하기 위해 Fedora VM에 있는 것과 동일한 버전인 GCC 5.1.1을 빌드할 수 있습니다. . 저는 Fedora 패키지의 "빌드 레시피"를 가능한 한 가깝게 따랐습니다.

답변1

이를 수행하는 "일반적인" 방법은 PATH, LD_LIBRARY_PATH, C_INCLUDE_PATH, CPLUS_INCLUDE_PATH 등과 같은 컴파일된 버전을 사용하도록 사용자 환경을 수정하는 것입니다.

로그인 스크립트에서 이러한 변수와 기타 관련 변수(예: ~/.profilefor bash또는 )를 설정합니다 sh.

그런 다음, 예를 들어 시스템 gcc로 gcc 5.20을 컴파일하고 홈 디렉터리에 설치합니다(예: ~/bin의 바이너리, ~/include의 헤더, ~/lib의 라이브러리 등).

컴파일하려는 다른 라이브러리/프로그램에도 동일한 작업을 수행하세요.

그러나 시스템 라이브러리와의 호환성은 보장되지 않습니다. 예를 들어, Qt의 새 버전에 대해 응용 프로그램을 컴파일하는 경우 시스템의 KDE/Qt에서 올바르게(또는 전혀) 실행되지 않을 수 있습니다.

개인적으로 나는 당신이 스스로 문제를 요구하고 있다고 생각합니다. 시스템에서 벗어나는 것이 클수록 필연적으로 더 많은 문제가 발생하고 복제하거나 이해할 수 있는 시스템으로 끝날 가능성이 줄어듭니다. 뭐 충분히 좋아. 디버깅되었습니다. 꼭 없이는 살 수 없는 것들만 다시 컴파일하는 것이 더 낫습니다. 심지어 새 패키지를 컴파일하고 시스템의 패키지 관리 도구(귀하의 경우 rpm)를 사용하여 시스템에 설치하는 것이 더 나을 것입니다. 좋은)

정말로 "최첨단" 버전이 필요한 경우 Fedora Rawhide 또는 Debian Sid와 같은 최첨단 알파 시험판 배포판을 사용하십시오.

관련 정보