如何在 RHEL7 上将 GCC 从 4.8 更新到 8.2

How to update GCC from 4.8 to 8.2 on RHEL7

我希望将我的 GCC 更新到最新版本(截至今天为 8.2),但是当我尝试使用 yum update gcc 时,它没有任何新的软件包要更新。我在查看 GCC 的网站时也没有任何帮助。任何帮助将不胜感激!

Red Hat Enterprise Linux 作为一个 "enterprise" 操作系统,旨在长期保持稳定和相似。这意味着默认情况下您不会获得 "latest and greatest" ,而是一个已知的良好实现,该实现在该特定 RHEL 版本上长期保持默认。通常,您只能通过升级 RHEL 获得实质性的软件升级。不幸的是,还没有 RHEL 8。

devtoolset 允许您切换到更新的带外版本的开发软件,如 GCC,而不是 "contaminate" 整个 OS 安装。我用它取得了巨大的成功,在 CentOS 6 上获得了 GCC 4.8(及其 C++11 支持),其中官方 GCC 是 4.4.

devtoolset-8 has GCC 8.2.1.

或者您可以选择使用更适合家庭用户的发行版,例如 Fedora。

或者您可以下载 GCC 源代码并自己构建它(但是哦!)。

肯定可以自己在 CentOS 上构建 gcc(虽然 ew!)。

一般按照以下步骤进行:

sudo yum -y update
sudo yum -y install bzip2 wget gcc gcc-c++ gmp-devel mpfr-devel libmpc-devel make
gcc --version
wget http://mirrors-usa.go-parts.com/gcc/releases/gcc-8.2.0/gcc-8.2.0.tar.gz
tar zxf gcc-8.2.0.tar.gz
mkdir gcc-8.2.0-build
cd gcc-8.2.0-build
../gcc-8.2.0/configure --enable-languages=c,c++ --disable-multilib
make -j 2
sudo make install
gcc --version

至此,很多8.2都看不到了,即

gcc version 4.8.5 (GCC)

只需覆盖刚刚构建的旧 gcc,即

# which gcc
/usr/local/bin/gcc
# cp gcc/xgcc /usr/local/bin/gcc
# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/aarch64-unknown-linux-gnu/7.2.0/lto-wrapper
Target: aarch64-unknown-linux-gnu
Configured with: ../gcc-7.2.0/configure --enable-languages=c,c++ --disable-multilib
Thread model: posix
gcc version 7.2.0 (GCC)

为了避免库错误,可能还需要更新 libstdc

cp ./aarch64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6 /usr/local/lib64/libstdc++.so.6
cp ./stage1-aarch64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6 /usr/lib64/libstdc++.so.6

也可以更新 libc.so,即 2.18

curl -O http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz
tar zxf glibc-2.18.tar.gz
cd glibc-2.18/
mkdir build
cd build/
../configure --prefix=/usr
make -j2
make install
ln -sf /usr/glibc-2.18/glibc-2.18.so /lib64/libc.so.6

最后,输入/lib64/libc.so.6确认

大多数情况下,ln会失败,因为旧关系,建议LD,即

LD_LIBRARY_PATH=/usr/glibc-2.18/lib
export LD_LIBRARY_PATH