GCC 9 빌드 오류: 'GLIBCXX_3.4.30' 버전을 찾을 수 없습니다.

GCC 9 빌드 오류: 'GLIBCXX_3.4.30' 버전을 찾을 수 없습니다.

저는 Debian 저장소에서 사용 가능한 gcc-12를 사용하여 Debian Bookworm(12)에 GCC 9.5를 설치하려고 했습니다. make찾을 수 없어 빌드가 실패했습니다 GLIBCXX_3.4.30. 로그의 관련 부분 make은 다음과 같습니다.

Making all in po
make[5]: Entering directory '/home/apps/builds/gcc/gcc-9/build/x86_64-pc-linux-gnu/libstdc++-v3/po'                                    
msgfmt -o de.mo ../../../../gcc-releases-gcc-9.5.0/libstdc++-v3/po/de.po                                                               
msgfmt -o fr.mo ../../../../gcc-releases-gcc-9.5.0/libstdc++-v3/po/fr.po
msgfmt: /home/apps/builds/gcc/gcc-9/build/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6: version `GLIBCXX_3.4.30' not found
 (required by /lib/x86_64-linux-gnu/libicuuc.so.72)                
make[5]: *** [Makefile:550: de.mo] Error 1                         
make[5]: *** Waiting for unfinished jobs....                       
msgfmt: /home/apps/builds/gcc/gcc-9/build/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6: version `GLIBCXX_3.4.30' not found
 (required by /lib/x86_64-linux-gnu/libicuuc.so.72)                
make[5]: *** [Makefile:550: fr.mo] Error 1
make[5]: Leaving directory '/home/apps/builds/gcc/gcc-9/build/x86_64-pc-linux-gnu/libstdc++-v3/po'
make[4]: *** [Makefile:562: all-recursive] Error 1
make[4]: Leaving directory '/home/apps/builds/gcc/gcc-9/build/x86_64-pc-linux-gnu/libstdc++-v3'
make[3]: *** [Makefile:487: all] Error 2
make[3]: Leaving directory '/home/apps/builds/gcc/gcc-9/build/x86_64-pc-linux-gnu/libstdc++-v3'
make[2]: *** [Makefile:19557: all-stage1-target-libstdc++-v3] Error 2
make[2]: Leaving directory '/home/apps/builds/gcc/gcc-9/build'
make[1]: *** [Makefile:27270: stage1-bubble] Error 2
make[1]: Leaving directory '/home/apps/builds/gcc/gcc-9/build'
make: *** [Makefile:1002: all] Error 2

다음 구성 옵션을 사용했습니다.

configure --prefix=path-to-install-dir --disable-multilib --enable-languages=c,c++,fortran --enable-checking --program-suffix=9.5

나는 내가 겪고있는 오류를 정말로 이해하지 못합니다. 흥미롭게도 동일한 시스템의 소스에서 GCC 12를 성공적으로 컴파일할 수 있습니다. /home/apps/builds/gcc/gcc-9/gcc-releases-gcc-9.5.gcc로 빌드하면 GCC 소스 코드가 거기에 있습니다 /home/apps/builds/gcc/gcc-9/build. GLIBCXXin의 최신 버전 /home/apps/builds/gcc/gcc-9/build/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6은 다음과 같습니다.GLIBCXX_3.4.28

답변1

여기서 문제는 빌드가 최신 버전에 의존하는 시스템 라이브러리에 의존하게 되지만 libstdc++.so.6그 자체로는 이전 버전을 빌드하게 된다는 것입니다 libstdc++.so.6. 후자가 전자보다 우선적으로 사용됩니다. msgfmt이는 (귀하의 예에서는 실패하는 것입니다) 와 같은 타사 도구를 실행할 때에도 마찬가지입니다 .

따라서 엄밀히 말하면 문제는 빌드에 사용된 컴파일러가 아니라 새 컴파일러의 종속성을 빌드할 때 사용된 라이브러리입니다... 빌드를 건너뛰면 이 문제를 해결할 수 있습니다 libstdc++. 옵션 --disable-libstdcxx에 추가하세요. configure이로 인해 구성이 작동하게 되었지만 특히 확인하기 위해 빌드를 실행하지 않았습니다. "누락"으로 인해 문제가 발생하는지 아니면 이 시스템이 대신 사용될지는 configure알 수 없습니다 .libstdc++libstdc++

이용하시면 더욱 편리하실 수 있습니다패키지 gcc-9가 불안정합니다— 올바르게 빌드된 모든 라이브러리를 제공합니다. 컨테이너 이미지 또는 chroot를 사용하여 액세스할 수 있습니다(참고자료 참조 mmdebstrap).

답변2

자신만의 GCC 버전을 구축하려면 libstdc++.so.6먼저GNU 텍스트 가져오기이는 순수 C로 작성되었습니다.0.17.

구성할 때 다른 접두사를 제공합니다. 예 /opt/gettext:

./configure --prefix=/opt/gettext

GCC를 빌드할 때 일시적으로 추가됩니다 ${prefix}/bin.PATH

관련 정보