소스에서 gcc-5를 컴파일하는 방법은 무엇입니까?

소스에서 gcc-5를 컴파일하는 방법은 무엇입니까?

최근 데비안의 불안정한 저장소에서 gcc-5가 제거된 것 같습니다. 이전 Linux 커널(3.19)을 컴파일하려면 gcc-5가 필요하므로 소스에서 빌드하고 싶지만 이로 인해 많은 문제가 발생합니다. 나는 내가 찾은 지침을 따랐습니다.여기, 그런데 어떤 설정을 해야 하는지 궁금합니다. 지금까지 나는 다음을 수행했습니다.

  1. 소스코드를 다운로드하고 압축을 푼다.
  2. 다음을 수행하여 gcc-5를 구성합니다.
% mkdir objdir
% cd objdir
% ../gcc-5.4.0/configure (I included neither options nor target flags)
  1. objdir내 디렉토리에 다음을 사용하여 빌드하려고 합니다.
% make BOOT_CFLAGS='-O' bootstrap

그런데 부팅 과정에서 오류가 발생하여 설치를 계속할 수 없었습니다. 약 5분 정도 실행한 후 다음과 같은 오류가 발생했습니다.

In file included from ../../../../gcc-5.4.0/libgcc/unwind-dw2.c:401:0:
./md-unwind-support.h: In function 'x86_fallback_frame_state':
./md-unwind-support.h:141:18: error: field 'uc' has incomplete type
struct ucontext uc;
                ^
make[5]: *** [../../../../gcc-5.4.0/libgcc/shared-object.mk:14: unwind-dw2.o] Error 1
make[5]: Leaving directory '/home/me/objdir/x86_64-unknown-linux-gnu/32/libgcc'
make[4]: *** [Makefile:1154: multi-do] Error 1
make[4]: Leaving directory '/home/me/objdir/x86_64-unknown-linux-gnu/libgcc'
make[3]: *** [Makefile:119: multi-do] Error 2
make[3]: Leaving directory '/home/me/objdir/x86_64-unknown-linux-gnu/libgcc'
make[2]: *** [Makefile:16510: all-stage1-target-libgcc] Error 2
make[2]: Leaving directory '/home/me/objdir'
make[1]: *** [Makefile:22461: stage1-bubble] Error 2
make[1]: Leaving directory '/home/me/objdir'
make: *** [Makefile:22798: bootstrap] Error 2

저는 Debian 10(Buster)을 실행 중이고 나열된 필수 필수 구성 요소를 설치했습니다.여기.

부팅 중에 발생하는 오류를 수정하거나 일반적으로 소스에서 빌드하는 등 도움이나 지침을 주시면 대단히 감사하겠습니다! 감사해요.

답변1

그 이유는 glibc가 변경되어 이전 컴파일러와의 호환성이 손상되었기 때문입니다. 이있다수리하다해당 컴파일러의 경우. 패치는 파일에서 struct ucontext, where 등으로 대체됩니다.ucontext_tlibgcc/config/<arch>/linux-unwind.h<arch>i386aarch64alpha

비슷한 것이 있습니다스택오버플로우에 대한 질문.

이러한 수정 사항 외에도 다음의 새니타이저 코드도 수정해야 합니다.여기(이것들 중 일부는 충분합니다) 그리고여기.

그런 다음 마침내 GCC가 구축되었습니다.

관련 정보