目录
2.3、新建gcc-bulid目录(与gcc-10.5.0同级)并进入该目录中
[3.1 、进入/usr/lib64目录](#3.1 、进入/usr/lib64目录)
3.2、拷贝libstdc++.so.6.0.28到系统/usr/lib64目录下
可能遇到的问题:
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