GCC가 C ++ 자체로 작성되었으므로 닭과 계란 문제가 없습니까?


10

4.8 릴리스 이후 C ++ 컴파일러 GCC (G ++ 부분)는 더 이상 C로 작성되지 않고 C ++ 자체로 작성됩니다. 나는 이것에 대한 가상의 질문이 있습니다.

아직 C ++ 컴파일러가없는 새로운 플랫폼에서 GCC의 C ++ 코드를 컴파일하는 방법이 궁금합니다. 물론 다른 컴퓨터에서 컴파일 된 사전 빌드 된 바이너리를 사용할 수 있습니다. 또는 C로 작성된 이전 버전의 GCC를 사용하여 현재 버전을 컴파일 할 수 있습니다.

그러나 사전 빌드 된 이진 파일과 최신 버전이 없으면 멈췄습니다. 그렇지 않은 경우 GCC 프로젝트의 C에서 C ++로 전환하면이 상황에 다른 영향이 있습니까?


3
크로스 컴파일 에 대해 읽고 싶더라도 여기에 무엇을 요구하는지 잘 모르겠습니다 .

5
완전히 새로운 플랫폼에는 C ++ 컴파일러 나 C 컴파일러가 없습니다. 크로스 컴파일이 답입니다.
doc

1
당신은 아마 읽어야 C에 GCC의 이동 ++ , C로 이동 ++ 가능성이 토론 GCC 지금 빌드 ++ C가 필요합니다 레딧에. gcc4.8 이전에는 임의의 운영 체제로 패키지 된 C 컴파일러로 빌드 할 수 있는지 확실하지 않습니다 (많은 경우 C89로 제한합니다).

2
이 질문에 대한 C ++의 특별한 점을 얻지 못했습니다. 문제는 C 또는 다른 언어로 존재합니까?
RemcoGerlich

답변:


16

이것은 실제로 bootstrapping 이라는 잘 알려진 개념 입니다. 기본적으로 현재 GCC 코드베이스를 빌드 할 수있는 GCC 버전을 빌드하기위한 최소한의 C 코드베이스가 있습니다. 자체 호스팅 언어는 수십 년 동안 이와 같은 일을 해왔습니다.


사실은 아닙니다. 그것은 더 이상 그렇지 않습니다 (그리고 문제의 문제). gcc더 이상 ac 전용 컴파일러로 빌드 할 수 없습니다. gcc 컴파일에 대한 유일한 보증은 gcc 버전 N을 gcc 버전 N-1로 빌드 할 수 있다는 것입니다.

9
@MichaelT : 그러나 이전 버전의 GCC C 컴파일러를 사용하여 빌드 할 수 있습니다. 그러면 C ++로 작성된 이후 버전을 컴파일 할 수 있습니다.
메이슨 휠러

나는 또한 문제의 질문을 가리 것 : However, without prebuilt binaries and just the newest version, you were stuck, right? If not, are there other implications on this situation raised by the switch from C to C++ of the GCC project?- 당신이 전제 되지 않는 이전 버전에 액세스 할 수 없으며,이 코드베이스에 대한 C로 C에서 스위치 ++의 다른 의미를 해결 않습니다.

9

컴파일하는 언어와 동일한 언어로 작성된 컴파일러를 부트 스트랩 이라고 합니다. 위키 백과 기사는 컴파일러를 부트 스트랩 할 수있는 여러 가지 방법을 설명합니다.

4.8 이후 G ++ 소스 코드 만 있고 대상 플랫폼 (기존 C ++ 컴파일러 없음)에 대해 사전 빌드 된 바이너리가 없다는 제한 사항을 감안할 때 G ++ 컴파일러 부트 스트랩은 크로스 컴파일 을 통해 수행 할 수 있습니다 .

크로스 컴파일을 사용하여 컴파일러를 부트 스트랩 할 때 여러 버전의 컴파일러를 빌드합니다.

  1. PC에서 C ++ 컴파일러를 설치합니다 (C ++ 컴파일러 일 수 있으며 G ++ 일 필요는 없음).
  2. 해당 컴파일러를 사용하여 PC에서 실행할 수 있고 대상 플랫폼에 대한 코드를 생성 할 수있는 G ++ 크로스 컴파일러를 만듭니다.
  3. 방금 구축 한 G ++ 크로스 컴파일러를 사용하여 대상 플랫폼에서 실행할 수있는 네이티브 G ++ 컴파일러를 만들고 해당 코드를 만들 수 있습니다.
  4. 끝났습니다. 새 플랫폼을위한 C ++ 컴파일러를 작성했습니다.

초기 단계를 수행 할 PC (또는 이와 유사한)가 없다면 실제로 막히지 만 그러한 상황에 처해 컴파일러를 부트 스트랩하려고 시도 할 가능성은 무시할 만합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.