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의 이름을 바꿉니다.
https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=883312dc79806f513275b72502231c751c14ff72
파일 내 에서 is 등 struct ucontext
으로 대체합니다 .ucontext_t
libgcc/config/<arch>/linux-unwind.h
<arch>
i386
aarch64
alpha
여기에 설명된 대로 구성합니다.
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_64
libstdc++-8.4.1-1.el8.x686
CXXABI
/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