升级 GCC #
编译 GCC #
下载源码 #
方法一 #
在 gcc官方镜像下载源码的压缩包
wget http://ftp.gnu.org/gnu/gcc/gcc-8.4.0/gcc-8.4.0.tar.gz
tar -zxvf gcc-8.4.0.tar.gz
方法二 #
在 github上载,注意这种方式是展开的源码,文件较多较大,下载时间可能更长
git clone https://github.com/gcc-mirror/gcc.git
安装依赖 #
yum install -y gmp gmp-devel mpfr mpfr-devel libmpc libmpc-devel
编译安装 #
mkdir gcc-8.4.0-build && cd gcc-8.4.0-build
../gcc-8.4.0/configure --enable-languages=c,c++ --disable-multilib
make -j $(nproc)
configure
更多的配置选项在
这里查看
注意:编译之前要保证 /tmp
有足够多的磁盘空间!
安装 #
make install
添加环境变量 编译默认的安装路径是 /usr/local/bin
, 在 /etc/profile
中追加
export PATH=/usr/local/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
修改完成后保存,使其生效
source /etc/profile
验证 #
gcc --version
输出
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/8.4.0/lto-wrapper
目标:x86_64-pc-linux-gnu
配置为:../gcc-8.4.0/configure --enable-languages=c,c++ --disable-multilib
线程模型:posix
gcc 版本 8.4.0 (GCC)
修改软连接 #
ln -sf /usr/local/lib64/libstdc++.so.6.0.25 /usr/lib64/libstdc++.so.6
ln -sf /usr/local/bin/gcc /usr/bin/cc
注:如果之前未安装过
gcc,到这里应该就结束了,但之前有就需要将旧的卸载(因为我解决不了两个版本共存的冲突问题),并链接新的
libstdc++
遇到的问题 #
Building GCC requires GMP 4.2 , MPFR 2.4.0 and MPC 0.8.0 . #
缺少依赖项,使用
yum install -y
fatal error: Killed signal terminated program cc1plus #
原因是内存不够了(vps 内存就512m),可以通过添加虚拟内存来解决,虚拟内存的增加方法可参考《 解决编译GCC内存不足的错误》和《 设置和修改Linux的swap分区大小》
通过 yum 升级 #
Software Collections(也称为SCL)是一个社区项目,使您可以在同一系统上构建,安装和使用多个版本的软件,而不会影响系统默认软件包。通过启用软件集合,您可以访问核心存储库中不可用的较新版本的编程语言和服务。
SCL 存储库提供了一个名为 Developer Toolset 的程序包,其中包括 GNU
Compiler Collection 的较新版本以及其他开发和调试工具。
首先,安装 CentOS SCL 发行文件。它是 CentOS Extras
存储库的一部分,可以通过运行以下命令进行安装
yum install -y centos-release-scl
当前,可以使用以下开发人员工具集集合:
- Developer Toolset 7
- Developer Toolset 6
在此示例中,我们将安装 Developer Toolset 版本 7。运行以下命令:
yum install -y devtoolset-7
要访问 GCC 版本 7,需要使用 scl 工具启动新的 Shell 实例
scl enable devtoolset-7 bash
执行完成后查看gcc的版本
gcc --version
输出
gcc (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5)
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
详情可参考 《如何在 CentOS7 上安装GCC编译器》安装多个GCC版本的部分