컴파일러 $Y와 함께 제공되는 배포판 $X를 사용하고 있지만 컴파일러 버전 $Z가 필요합니다.

컴파일러 $Y와 함께 제공되는 배포판 $X를 사용하고 있지만 컴파일러 버전 $Z가 필요합니다.

질문

이 질문과 이를 해결하기 위한 다양한 방법이 담긴 답변이 거의 매일 우리의 커뮤니케이션에서 여러 번 등장합니다. 검색 결과가 여기로 연결되었다면 환영합니다! 귀하의 질문에 링크된 댓글을 남기면 귀하의 질문이 동일한 카테고리에 속하므로 아래 목록에 추가될 수 있다고 안전하게 가정하실 수 있습니다.

[gcc]이는 검색어 품질 저하로 인해 발생한 많은 문제 중 네 가지에 불과합니다 . 지식이 풍부하고 먼저 의사소통을 할 수 있는 독자/사용자는 거의 항상 나에게 어떻게 해야 하는지 물어볼 것입니다..." 시도하고 실패할 정도로 운이 좋지 않은 독자는 거의 항상 "깨졌어" 또는 "내가 뭔가 깨뜨린 것 같아요"라고 말할 것입니다." 이 질문과 답변에서는 하이브리드 컴파일러가 모든 Linux를 중단시키는 이유를 설명하려고 노력할 것이며, 답변에서는 문제를 해결하기 위해 제가 아는 가장 간단한 방법을 제공할 것입니다. 이 방법은 파손을 일으키지는 않지만 이로 인해 약간의 오버헤드가 발생합니다. 커뮤니티에서 Q&A를 제공하고 제 접근 방식이 마음에 드신다면 투표해 주시기 바랍니다.

문제 설명

총 길이 DR: 점프하다컴파일러를 다운그레이드하면 왜 문제가 발생합니까?

나는 다양한 답변에 아래 이미지를 두세 번 사용했으며 이것이 우리 모두에게 좋은 출발점을 제공한다고 생각합니다. 크기가 크다는 것을 알고 있으므로 독자들이 원할 경우 별도의 탭에서 열고 확대/축소 등을 할 것을 권장합니다.

리눅스 배포 일정

이 목록에서 배포판을 찾아 계속 읽어보세요. 배포판에 상위 배포판이 있다는 것을 알 수 있습니다. 좋아요, 좋아요, 상위 배포판(타임라인의 가장 왼쪽에 있는 배포판)을 사용하는 독자들이 다음과 같이 질문할 것이라는 것을 알고 있습니다.

저는 가장 왼쪽의 것을 사용하고 있는데, 그 부모는 어디에 있나요?

이제 우리는 문제의 핵심에 도달합니다. 예를 들어 $X내 제목을 입력해 보겠습니다 $Y(참을성 있는 독자 여러분, $Z곧 제공될 예정입니다).

  • $X = Fedora 39
  • $Y = 13.2.1-6.fc39

정의

  • 배포(Wikipedia에서 인용):

Linux 배포판(종종 distro로 축약됨)은 Linux 커널을 포함한 소프트웨어 모음으로 구성된 운영 체제이며 일반적으로패키지 관리 시스템.

  • 패키지 관리 시스템(다시 인용):

패키지 관리자 또는 패키지 관리 시스템은 컴퓨터 프로그램을 일관된 방식으로 설치, 업그레이드, 구성 및 제거하는 프로세스를 자동화하는 소프트웨어 도구 모음입니다.

이 두 항목을 이해하면 상위 배포 질문에 답하는 데 도움이 되지만 불행히도 또 다른 질문이 있습니다. 배포 관리자는 어떻게 배포를 생성합니까?

답변: 커널을 제외한 모든 Linux 소프트웨어는 다음 위치에 저장됩니다.GNU 소프트웨어 FTP 사이트소스 코드 아카이브에 있습니다. 모든 Linux 커널은 소스 코드 아카이브에서 다운로드할 수 있습니다.리눅스 커널 아카이브. 즉, 모든 배포판은 상위 배포판을 포함하여 동일한 소스 코드에서 시작됩니다.

컴파일러를 다운그레이드하면 왜 문제가 발생합니까?

이전 정의에 따르면 배포판은 관련 소프트웨어의 그룹 또는 그룹입니다. 이 관계는 배포 저장소(또는 배포가 선택하는 다른 이름)에서 볼 수 있습니다.

새 버전(우리의 경우 $X= Fedora 39)을 사용할 수 있게 되면 해당 버전의 저장소가 잠깁니다. 특히 버전이 잠겨 있습니다. 이는 이제 해당 저장소의 모든 패키지가 잠긴다는 의미입니다.시간 동결. 한번 얼면 변하지 않습니다. 버전이 지원되는 동안에만 살아남을 수 있고, 버전이 업그레이드되면 죽습니다.

GCC를 구축하는 데 필요한 도구도 이제 동결된 저장소에 있습니다. 사용자가 고정 저장소와 함께 제공된 GCC를 업그레이드하거나 다운그레이드하려고 시도하면 성공하면 버전 잠금이 해제됩니다.. 손상이 발생하는 것을 방지하기 위해 운영 체제의 패키지 관리자는 이러한 일이 발생하지 않도록 방지합니다.

내 답변을 읽고 내가 어떻게 극복했는지 알아보세요.$Z

답변1

덜 무거운 솔루션은 컨테이너를 사용하는 것입니다. Docker 또는 Podman을 설치하고 다음 단계를 따르세요.eyoung100님의 답변원하는 배포판을 식별하거나 찾아보세요.참회학에 대하여.

동일한 Fedora 36 예제를 사용하여 컨테이너를 실행합니다.

podman run -it fedora:36

-v컨테이너 내부에서 시스템의 디렉터리를 사용할 수 있도록 하는 옵션을 추가할 수 있습니다 .

podman run -it -v ~/myproject:/myproject:z fedora:36

:z(SELinux를 사용하는 경우에만 추가됩니다.)

컨테이너 내부에 gcc필요한 다른 도구를 설치하고 프로젝트를 빌드하면( 에서 /myproject) 공유 디렉터리에서 파일을 찾을 수 있습니다.

답변2

내 솔루션

우선, 패키지가 저장소에 없거나 타사 저장소에서 추가할 수 없는 경우 처음부터 컴파일하거나 "강제로" 컴파일해서는 안 되기 때문에 저는 순수주의자로 간주될 것 같습니다. 작동합니다." 왜냐하면 그렇게 하면 패키지 관리자가 단락될 것이기 때문입니다. 이를 염두에 두고 나는 확고한 해결책을 생각해 냈습니다.


가상화는 우리의 친구입니다

이 방법을 구현하려면 몇 가지 도구와 하드 드라이브 공간이 필요합니다. 여유 공간을 남겨두겠습니다. 그 외에는 다음 단계를 따르세요.

  1. 설치하다가상 상자패키지 관리자와 함께
  2. 설치하다도보 여행가패키지 관리자와 함께

노트: 나는 Vagrant가 Hyper-V 및 docker와 함께 작동할 것이라고 믿습니다(참조스티븐 키트의 답변Docker 도움말). 하지만 VirtualBox를 선택한 이유는 그것이 제가 먼저 배웠고 필요한 경우 가상 머신을 추가로 구성하기 위해 가상 머신에 데스크톱을 설치할 수 있기 때문입니다.

가상화 지원을 설치한 후 진행할 수 있습니다. 나는 계속한다:

  1. 요구 사항 수집 - 저는 웹 프로그래머이므로 고객의 요구 사항을 수집해 보겠습니다. 우리의 목적을 위해 지금 작성하겠습니다 $Z. 위 질문 제목의 예제 질문 2를 사용하면 다음 값을 얻을 수 있습니다.
    • $X = Fedora
    • $Y = 13.2.1-6.fc39
    • $Z = 12.x.x
  2. 언제나즐겨찾는 엔진에서 다음 문장을 검색어로 사용하세요. $X의 어떤 릴리스에 GCC $Z가 포함되어 있나요?

예를 들어 어떤 Fedora 버전에 GCC 12가 포함되어 있는지 살펴보겠습니다. 이제 Google을 인용해 보겠습니다.

Fedora 36 GNU 툴체인을 gcc 12 및 glibc 2.35로 업데이트했습니다. gcc 12는 현재 개발 중이며 출시되면 Fedora 36에 포함될 예정입니다. 2022년 2월 16일

  1. 위 버전인 36이 아직 지원되는지 확인해 보겠습니다. 검색 엔진:
    $X 게시 기록

이는 우리 예의 Fedora 릴리스 내역과 동일합니다.페도라 리눅스 출시 내역. 좋아요, 이제 우리는 무엇을 할까요? Fedora 36은 더 이상 지원되지 않는 것 같습니다. 이것이 우리가 Vagrant를 추가한 이유입니다. 우리가 방문하면방황하는 구름, Fedora 36을 검색하면 다음이 생성됩니다.이 결과, 그리고 사용길 잃은 파일, 호스트 시스템에 프로젝트 파일을 유지하면서 전체 VM 버전을 사용자 정의하고 VM을 사용하여 애플리케이션이나 웹 사이트를 개발할 수 있습니다.

내가 이 방식을 선택한 이유

가상화를 사용하면 개발 환경을 매일 사용하는 시스템과 분리하고 돌이킬 수 없는 실수를 방지할 수 있습니다. 설치 시간이 좀 더 걸릴 것이라는 것을 알고 있지만 Vagrant는 한 번만 설치하면 됩니다. 프로젝트 요구사항이 변경될 때마다 vagrantfile을 생성하세요. Vagrant와 가상화에 대한 학습 곡선은 작으며, 여러 컴파일러를 설치하는 방법을 알아내려고 시도하는 동안 실수를 했다면 운영 체제를 다시 설치하는 것이 좋습니다.

관련 정보