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 "버그" 페이지: