在 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

替换struct ucontextucontext_tinlibgcc/config/<arch>/linux-unwind.h文件、where <arch>is 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

相关内容