최신 Linux 배포판(Devuan Excalibur/Debian Trixie)에서 이전 GCC 버전(8.5.0)을 어떻게 빌드합니까?

최신 Linux 배포판(Devuan Excalibur/Debian Trixie)에서 이전 GCC 버전(8.5.0)을 어떻게 빌드합니까?

Devuan Excalibur GNU/Linux(예: systemd가 없는 Debian Trixie)와 같은 최신 시스템에서 GCC 8.x를 다운로드하여 빌드하려고 하면 다음 오류와 함께 실패합니다.

libstdc++.so.6: version `GLIBCXX_3.4.30' not found

누락된 관련 [?] 위에 시스템을 수동으로 복사하고 libstdc++6.so프로세스를 몇 번 반복하면 다른 오류가 발생합니다.

make[7]: Entering directory '/usr/local/src/gcc-8.5.0/x86_64-pc-linux-gnu/32/libitm'
In file included from /usr/include/linux/fs.h:19,
                 from ../../.././libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc:68:
/usr/include/linux/mount.h:96:6: error: multiple definition of ‘enum fsconfig_command’
 enum fsconfig_command {
      ^~~~~~~~~~~~~~~~
In file included from ../../.././libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc:55:
/usr/local/src/gcc-8.5.0/host-x86_64-pc-linux-gnu/gcc/include-fixed/sys/mount.h:249:6: note: previous definition here
 enum fsconfig_command
      ^~~~~~~~~~~~~~~~
In file included from /usr/include/linux/fs.h:19,
                 from ../../.././libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc:68:
/usr/include/linux/mount.h:130:8: error: redefinition of ‘struct mount_attr’
 struct mount_attr {
        ^~~~~~~~~~
In file included from ../../.././libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc:55:
/usr/local/src/gcc-8.5.0/host-x86_64-pc-linux-gnu/gcc/include-fixed/sys/mount.h:219:8: note: previous definition of ‘struct mount_attr’
 struct mount_attr
        ^~~~~~~~~~

이상하네요. 하지만 라이브러리 버전을 강제로 적용하려는 제 잘못일 수도 있습니다. 어쨌든 - 실제로 내 컴퓨터에 GCC 8.5.0을 어떻게 빌드할 수 있나요?

노트:

  • 다음과 같이 구성됨: ./configure --disable-bootstrap --enable-languages=c,c++.
  • 추가 정보는 요청 시 제공됩니다.

답변1

솔루션에는 여러 단계가 포함됩니다.

  • GCC 표준 C++ 라이브러리의 정적 64비트 및 32비트 버전용 apt 패키지를 설치합니다 libstdc++-dev.lib32stdc++-dev
  • 새니타이저 라이브러리가 빌드되지 않도록 GCC 저장소를 구성하십시오. --disable-libsanitizer명령에 인수를 추가하십시오 configure.

이 정도면 충분합니다. 시간이 지남에 따라 최신 버전의 데비안에서는 수정하거나 해결하려는 것보다 더 많은 문제가 발생할 수 있습니다.

관련 GCC "버그" 페이지:

관련 정보