centos 7升级gcc到10.5.0

目录

1、安装gcc

1.1、查看是否含有gcc及gcc版本

1.2、快速安装gcc

2、升级gcc

2.1、下载gcc源码包并解压缩

2.2、下载编译依赖项

2.3、新建gcc-bulid目录(与gcc-10.5.0同级)并进入该目录中

2.4、生成Makefile文件

2.5、开始编译

2.6、安装

2.7、重启

2.8、验证

3、依赖新的版本

[3.1 、进入/usr/lib64目录](#3.1 、进入/usr/lib64目录)

3.2、拷贝libstdc++.so.6.0.28到系统/usr/lib64目录下

3.3、修改文件权限

3.4、备份原libstdc++.so.6软连接

3.5、创建新的软连接,连接到新的库

3.6、验证依赖是否更新

3.7、验证新的库是否生效


可能遇到的问题:

1、/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found问题

2、编译报错:error: 'const char* libc_name_p

bash 复制代码
[INFO ]  =================================================================
[INFO ]  Installing final gcc compiler
[EXTRA]    Configuring final gcc compiler
[EXTRA]    Building final gcc compiler
[ERROR]    cfns.gperf:101:1: error: 'const char* libc_name_p(const char*, unsigned int)' redeclared inline with 'gnu_inline' attribute
[ERROR]    make[3]: *** [cp/except.o] Error 1
[ERROR]    make[2]: *** [all-gcc] Error 2
[ERROR]    make[1]: *** [all] Error 2
[ERROR]  

1、安装gcc

由于 Linux 操作系统的自由、开源,在其基础上衍生出了很多不同的 Linux 操作系统,如 CentOS、Ubuntu、Debian 等。这些 Linux 发行版中,大多数都默认装有 GCC 编译器(版本通常都较低)。

1.1、查看是否含有gcc及gcc版本

bash 复制代码
[root@localhost ~]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/6.5.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../../gcc-6.5.0/configure --prefix=/usr/local --enable-checking=release --enable-languages=c,c++ --disable-multilib
Thread model: posix
gcc version 6.5.0 (GCC)
[root@localhost ~]#

可以看到,系统中包含了gcc且版本为6.5.0,如果没有gcc,可以通过下面命令来进行安装

1.2、快速安装gcc

bash 复制代码
yum -y install gcc
yum -y install gcc-c++

通过如上命令得到的gcc通常版本较低。

2、升级gcc

升级gcc需要在系统中包含一个低版本的gcc

2.1、下载gcc源码包并解压缩

下载地址:gnu-gcc安装包下载_开源镜像站-阿里云,可以手动下载,也可以通过wget直接下载到服务器上

bash 复制代码
# 进入目录
cd /usr/local
# 下载源码
wget https://mirrors.aliyun.com/gnu/gcc/gcc-10.5.0/gcc-10.5.0.tar.gz
# 解压缩
tar -zxvf gcc-10.2.0.tar.gz
# 进入gcc源码目录
cd gcc-10.5.0/

2.2、下载编译依赖项

bash 复制代码
./contrib/download_prerequisites

执行完毕后,可以发现gcc-10.5.0的目录中多了gmp、isl、mpc、mpfr,如果没有这些依赖包,则不能进行下面的操作。

2.3、新建gcc-bulid目录(与gcc-10.5.0同级)并进入该目录中

bash 复制代码
mkdir gcc-build
cd gcc-build/

2.4、生成Makefile文件

bash 复制代码
../gcc-10.5.0/configure --prefix=/usr/local --enable-checking=release --enable-languages=c,c++ --disable-multilib

这时候如果出现报错:

checking for the correct version of gmp.h... no configure: error: Building GCC requires GMP 4.2+, MPFR 3.1.0+ and MPC 0.8.0+.

解决办法:执行以下命令

bash 复制代码
yum -y install  gmp  gmp-devel  mpfr  mpfr-devel  libmpc  libmpc-devel

再次运行命令就成功了

bash 复制代码
../gcc-10.5.0/configure --prefix=/usr/local --enable-checking=release --enable-languages=c,c++ --disable-multilib

2.5、开始编译

bash 复制代码
make

注意:编译时间较长,请选择适当的时间进行此操作。

GCC高版本编译低版本GCC报错:

bash 复制代码
[INFO ]  =================================================================
[INFO ]  Installing final gcc compiler
[EXTRA]    Configuring final gcc compiler
[EXTRA]    Building final gcc compiler
[ERROR]    cfns.gperf:101:1: error: 'const char* libc_name_p(const char*, unsigned int)' redeclared inline with 'gnu_inline' attribute
[ERROR]    make[3]: *** [cp/except.o] Error 1
[ERROR]    make[2]: *** [all-gcc] Error 2
[ERROR]    make[1]: *** [all] Error 2
[ERROR] 

解决办法,修改要编译的GCC代码,参考链接如下

https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=ec1cc0263f156f70693a62cf17b254a0029f4852

2.6、安装

bash 复制代码
make install

2.7、重启

2.8、验证

bash 复制代码
[root@localhost ~]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/10.5.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../../gcc-10.5.0/configure --prefix=/usr/local --enable-checking=release --enable-languages=c,c++ --disable-multilib
Thread model: posix
gcc version 10.5.0 (GCC)
[root@localhost ~]#

3、依赖新的版本

3.1 、进入/usr/lib64目录

bash 复制代码
cd /usr/lib64

3.2、拷贝libstdc++.so.6.0.28到系统/usr/lib64目录下

bash 复制代码
cp /usr/local/lib64/libstdc++.so.6.0.28 .

3.3、修改文件权限

bash 复制代码
chmod 755 libstdc++.so.6.0.28

3.4、备份原libstdc++.so.6软连接

bash 复制代码
mv libstdc++.so.6 libstdc++.so.6-bak

3.5、创建新的软连接,连接到新的库

bash 复制代码
ln -s libstdc++.so.6.0.28 libstdc++.so.6

3.6、验证依赖是否更新

bash 复制代码
ll libstd*
[root@localhost lib64]#  ll libstd*
lrwxrwxrwx. 1 root root       19 Jul 14 20:05 libstdc++.so.6 -> libstdc++.so.6.0.22
-rwxr-xr-x. 1 root root   995840 Sep 29  2020 libstdc++.so.6.0.19
-rwxr-xr-x. 1 root root 11541760 Jul 14 20:04 libstdc++.so.6.0.22
-rwxr-xr-x. 1 root root 16833120 Jul 14 04:46 libstdc++.so.6.0.28
lrwxrwxrwx. 1 root root       19 Feb  9  2022 libstdc++.so.6-bak -> libstdc++.so.6.0.19
lrwxrwxrwx. 1 root root       19 Jul 14 04:48 libstdc++.so.6-bak.bak -> libstdc++.so.6.0.28
[root@localhost lib64]#

3.7、验证新的库是否生效

bash 复制代码
strings /usr/lib64/libstdc++.so.6|grep GLIBCXX
[root@localhost lib64]# strings /usr/lib64/libstdc++.so.6|grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22

jdk下载:Index of java-local/jdk

相关推荐
吳所畏惧3 分钟前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈6 分钟前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
HiDev_35 分钟前
【非标自动化】2、认识元器件(确定目标)
运维·自动化
Zhang~Ling1 小时前
从 fopen 到 struct file:从零开始拆解 Linux 文件 I/O
linux·运维·服务器
DeeplyMind1 小时前
Linux 深入 per-VMA lock:Linux 缺页路径如何摆脱 mmap_lock
linux·per-vma lock
爱写代码的森1 小时前
蒙三方库 | harmony-utils之FileUtil文件重命名与属性查询详解
linux·运维·服务器·华为·harmonyos·鸿蒙·huawei
中微极客2 小时前
2026主流AI Agent框架技术选型与性能对比
运维·网络·人工智能
久曲健的测试窝2 小时前
智能座舱自动化测试落地方案:数字仿真搭配实车实测,解决用例运维与场景失真难题
运维
XMAIPC_Robot3 小时前
软硬协同实时控制|RK3588业务调度+FPGA硬件时序,ethercat实现半导体设备微秒级响应(125us)
linux·arm开发·人工智能·fpga开发
AOwhisky3 小时前
Python 学习笔记(第十五期)——运维自动化(下·后篇):堡垒机实战——paramiko高阶篇
运维·python·学习·云原生·自动化·运维开发