CentOS 8에 GCC 4.8.5 설치

CentOS 8에 GCC 4.8.5 설치

GCC 8.4.1을 사용하여 CentOS 8 Classic에서 GCC 4.8.5를 설치하려고 합니다. 내가 한 일은 다음과 같습니다(최근 진행 상황을 반영하여 질문이 업데이트되었습니다).

필수 구성 요소 가져오기

yum install gcc make glibc-devel glibc-devel.i686 libstdc++-8.4.1-1.el8.i686

아래 설명된 대로 컴파일러와 해당 종속성을 가져옵니다.

https://bytefreaks.net/gnulinux/downgrade-gcc-on-centos-7-0-64bit-to-version-4-8-2

wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.gz
tar -xvf gcc-4.8.5.tar.gz;
cd gcc-4.8.5/
./contrib/download_prerequisites;

libc_name_p의 이중 정의를 방지하려면 다음과 같이 파일을 패치하세요.

https://unix.stackexchange.com/a/571800

Except.c에 포함된 cfns.h 파일에서

cfns.h를 편집하고 함수 선언을 변경합니다.

#ifdef __GNUC__
__inline
#endif
const char * libc_name_p (const char *, unsigned int);

...그리고 함수의 정의

#ifdef __GNUC__
__inline
#ifdef __GNUC_STDC_INLINE__
__attribute__ ((__gnu_inline__))
#endif
#endif
const char * libc_name_p (const char *, unsigned int);

다음 코드와 그 뒤에 선언/정의

#ifdef __GNUC__
#ifdef __GNUC_STDC_INLINE__
__attribute__ ((__gnu_inline__))
#else
__inline
#endif
#endif

아래 설명에 따라 파일을 패치하여 ucontext_t의 이름을 바꿉니다.

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

https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=883312dc79806f513275b72502231c751c14ff72

파일 내 에서 is 등 struct ucontext으로 대체합니다 .ucontext_tlibgcc/config/<arch>/linux-unwind.h<arch>i386aarch64alpha

여기에 설명된 대로 구성합니다.

dnf를 통해 Centos 8에 레거시 gcc 패키지 설치

mkdir BUILD
cd BUILD
export CFLAGS="-O2 -march=native -pipe"
export CXXFLAGS=$CFLAGS
export LD_LIBRARY_PATH="/lib:/lib64:"$LD_LIBRARY_PATH
../configure --prefix=$HOME/local/gcc/4.8.5

세워

make
make install

다음 오류로 인해 MAKE 단계에서 전체 프로세스가 실패합니다.

/home/sergey/Desktop/gcc-4.8.5/BUILD/./gcc/cc1plus: 
/home/sergey/Desktop/gcc-4.8.5/BUILD/x86_64-unknown-linux-gnu/
libstdc++-v3/src/.libs/libstdc++.so.6: version `CXXABI_1.3.9' not found
(required by /home/sergey/Desktop/gcc-4.8.5/BUILD/./gcc/cc1plus)

장착 위치를 수정해 보았 LD_LIBRARY_PATH="/lib:/lib64:"$LD_LIBRARY_PATH으나 소용이 없었습니다. 두 가지 모두 필요한 버전이 존재하는 것 같습니다.libstdc++-8.4.1-1.el8.x86_64libstdc++-8.4.1-1.el8.x686CXXABI/lib/lib64

strings /lib64/libstdc++.so.6 | grep CXXABI
...
CXXABI_1.3.9
...

내가 시도한 대안(또한 실패함)

다음을 구성하면 export CXXFLAGS=$CFLAGS" -std=gnu++98"다음을 얻습니다.

make[6]: *** No rule to make target '../src/c++11
/libc++11convenience.la', needed by 'libstdc++.la'.  Stop.

구성하면 --with-multilib-list=m64다음을 얻습니다.

configure: error: in `/home/sergey/Desktop/gcc-4.8.5/BUILD/
x86_64-unknown-linux-gnu/libsanitizer':
configure: error: C compiler cannot create executables

이 문제를 극복하는 방법을 알아내도록 도와주실 수 있나요? 감사해요

답변1

적절한 것에서오류 보고서:

야쿠브 옐리네크2017-05-13 06:52:08 UTC

버그는 GCC 4.8 측에 있으므로 패치를 적용하거나 -std=gnu++98로 빌드해야 합니다. 그러면 __GNUC_STDC_INLINE__이 정의되지 않고 제대로 컴파일됩니다.

이 답변도 확인하십시오.https://unix.stackexchange.com/a/472713/260833

관련 정보