CentOS 6.10 安装完成以后,查看GCC的版本,发现是 gcc version 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC),这个版本的GCC已经比较老了,对目前新的C++特性支持得不是很好,本文将笔者自己安装GCC的流程记录下来,便于以后参考。本文之安装步骤适合CentOS Linux 6 及以上版本,包括CentOS Linux 7.x与CentOS Linux 8.x。
一、下载GCC 7.40 源代码
http://ftp.gnu.org.ua/gnu/gcc/gcc-7.4.0/gcc-7.4.0.tar.gz
二、创建一个目录用于编译GCC
进入Linux系统,创建 /gcc_build
cd /
mkdir /gcc_build
cd /gcc_build
wget http://ftp.gnu.org.ua/gnu/gcc/gcc-7.4.0/gcc-7.4.0.tar.gz
三、 开始安装编译
在 gcc-7.4.0.tar.gz 下载完成后,输入如下命令:
tar -xzvf gcc-7.4.0.tar.gz
cd gcc-7.4.0/contrib
vi download_prerequisites
为什么要修改 download_prerequisites 这个脚本,是因为 download_prerequisites 里的原始指定的站点ftp://gcc.gnu.org好像不能访问,修改后的download_prerequisites文件部分如下:
#base_url='ftp://gcc.gnu.org/pub/gcc/infrastructure/'
base_url='https://gcc.gnu.org/pub/gcc/infrastructure/'
保存好 download_prerequisites 后
cd ..
yum -y install texinfo
./contrib/download_prerequisites
提前检查安装其它依赖项(笔者在编译过程中碰到问题总结的)
1、检查g++是否安装,
g++ -v
如果提示没有安装,请用如下命令安装
yum install gcc-c++
2、安装zlib头文件,gcc需要用到
yum install zlib-devel.x86_64
3、提前安装那个texinfo包,然后创建build目录并configure:
mkdir build
cd build
../configure --prefix=/usr \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--with-bugurl=http://bugzilla.redhat.com/bugzilla \
--enable-bootstrap \
--enable-shared \
--enable-threads=posix \
--enable-checking=release \
--with-system-zlib \
--enable-__cxa_atexit \
--disable-libunwind-exceptions \
--enable-gnu-unique-object \
--enable-languages=c,c++,objc,obj-c++ \
--disable-dssi --disable-libjava-multilib \
--disable-multilib \
--with-ppl \
--with-cloog \
--with-tune=generic \
--with-arch_32=x86-64 \
--build=x86_64-redhat-linux
笔者的这个配置项不支持java编译,不支持ada,因为ada语言在实际当中用不着,不支持java编译。
4、然后执行make
make -j4
-j4 选项是make对多核处理器的并行编译优化,如果不成功请使用 make。make -j带一个参数,比如在一台双核的机器上,完全可以用make -j4,让make最多允许4个编译命令同时执行,这样可以更有效的利用CPU资源。并行编译是可以提高编译速度的,但并行的任务不宜太多,一般是以CPU的核心数目的两倍为宜。
四、安装
make install
备注:
查看gcc的安装情况,进入 /usr/lib64 目录,执行如下命令:
cd /usr/lib64
ls -l libstd*
可以看到结果如下:
-rw-r--r--. 1 root root 29659832 Nov 3 15:49 libstdc++.a
-rw-r--r--. 1 root root 10387592 Nov 3 15:49 libstdc++fs.a
-rwxr-xr-x. 1 root root 899 Nov 3 15:49 libstdc++fs.la
-rwxr-xr-x. 1 root root 959 Nov 3 15:49 libstdc++.la
lrwxrwxrwx. 1 root root 19 Nov 3 15:49 libstdc++.so -> libstdc++.so.6.0.24
lrwxrwxrwx. 1 root root 19 Nov 3 15:49 libstdc++.so.6 -> libstdc++.so.6.0.24
-rwxr-xr-x. 1 root root 989840 Jun 19 2018 libstdc++.so.6.0.13
-rwxr-xr-x. 1 root root 11705927 Nov 3 15:49 libstdc++.so.6.0.24
-rw-r--r--. 1 root root 2385 Nov 3 15:49 libstdc++.so.6.0.24-gdb.py
libstdc++.so 已经指向 libstdc++.so.6.0.24,而libstdc++.so.6.0.24 是刚才编译安装产生的,执行命令:
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
输出如下:
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
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
可以看到 GLIBCXX_3.4.24 这个符号,说明是gcc 7.40正确安装了。