我正在尝试使用 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
替换struct ucontext
为ucontext_t
inlibgcc/config/<arch>/linux-unwind.h
文件、where <arch>
is 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__ 将不会被定义,并且应该可以正常编译。