Centos7 从源码安装/升级GCC(超详细)

Centos7.6 默认安装的gcc版本为4.8.5,可通过命令gcc -v查看,如果需要使用gcc的最新特性,则需要源码安装gcc最新版。

Centos7 从源码安装/升级GCC(超详细)_第1张图片

gcc -v 输出的信息,包括生成makefile时候的configure,在步骤5可以参考该配置。

使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
目标:x86_64-redhat-linux
配置为:../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-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux                                                                     
线程模型:posix                                                                     
gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)

GCC官网-->GCC Mirror Sites-->日本Site-->gcc-8.3.0.tar.gz

1.yum安装依赖包

# yum install -y gcc gcc-c++ gcc-gnat libgcc libgcc.i686 glibc-devel bison flex texinfo build-essential zlib-devel

 温馨提示:若出现,致命错误: zlib.h:没有那个文件或目录。

这个错误是因为zlib包没有安装,安装后问题即可解决。
但有一点请注意安装命令是:yum install zlib-devel,
而非yum install zlib。

下载GCC最新依赖:

$ ./contrib/download_prerequisites

Centos7 从源码安装/升级GCC(超详细)_第2张图片

2.安装最新依赖到/usr/local目录下:

在普通用户权限$下即可:

cd gmp-6.1.0
./configure --prefix=/usr/local/gmp-6.1.0
make && make install
cd mpfr-3.1.4
./configure --prefix=/usr/local/mpfr-3.1.4 --with-gmp=/usr/local/gmp-6.1.0
make && make install
cd mpc-1.0.3
./configure --prefix=/usr/local/mpc-1.0.3 --with-gmp=/usr/local/gmp-6.1.0 --with-mpfr=/usr/local/mpfr-3.1.4
make && make install
cd isl-0.18/
./configure --prefix=/usr/local/isl-0.18 --with-gmp-prefix=/usr/local/gmp-6.1.0

在超级用户root权限#下:

# make && make install

注意:

上面安装isl-0.18包,不能像其他的将gmp包的路径配置到--with-gmp,而是配置到--with-gmp-prefix下,不然会报错:

可通过查看isl-0.18源代码的configure文件找到原因:

Centos7 从源码安装/升级GCC(超详细)_第3张图片

Centos7 从源码安装/升级GCC(超详细)_第4张图片

3.将gcc最新依赖包添加到动态链接库:

# vi /etc/ld.so.conf

Centos7 从源码安装/升级GCC(超详细)_第5张图片

重新搜索当前系统上所有库文件搜索路径下的库文件,并生成缓存

# ldconfig -v

4.退到gcc-8.3.0目录,新建一个编译目录build,用于存放编译生成的文件:

$ mkdir build && cd build

5.进入编译目录build后,通过gcc-8.3.0文件夹下的configure脚本生成makefile文件。

此时的设置可以参考前面的gcc-4.8.5的配置,-prefix配置make install的目录(安装目录),--enable-languages中去掉java(不支持),仅支持本机x64配置--disable-multilib(需要支持x86就去掉)。

$ ../configure --prefix=/usr/local/gcc-8.3.0 --with-gmp=/usr/local/gmp-6.1.0 --with-mpfr=/usr/local/mpfr-3.1.4 --with-mpc=/usr/local/mpc-1.0.3 --with-isl=/usr/local/isl-0.18 --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-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,fortran,ada,go,lto --enable-plugin --enable-initfini-array --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux --disable-multilib

配置完成后,进行make和make install。

# make && make install

Tips:默认编译比较慢,可以通过-j参数来增加参加编译的cpu核心数N(双核cpu:make -j 2),make -j N,此处,N小于或等于每颗物理CPU中的核心数。

6.配置环境变量

# vi /etc/profile

在profile文件结尾加入一行:

export PATH=/usr/local/gcc-8.3.0/bin:$PATH

Centos7 从源码安装/升级GCC(超详细)_第6张图片

使其立即生效# source /etc/profile

7.使用gcc -v检查gcc版本,是否为gcc-8.3.0

Centos7 从源码安装/升级GCC(超详细)_第7张图片

8.[补充]更新动态库

不然会导致编译成功的新程序,运行报“/lib64/libstdc++.so.6: version 'CXXABI_1.3.8' not found”错误。

原因是因为升级GCC后相应的动态库没有更新,导致新编译器编译程序成功,运行不成功。

(1)使用命令$ ls -l /usr/lib64/libstdc++.so.6你会发现当前动态库是一个软链接:

(2)查看动态库:

$ strings /usr/lib64/libstdc++.so.6.0.19 | grep CXXABI

Centos7 从源码安装/升级GCC(超详细)_第8张图片

可见,最高版本1.3.7,小于需要的1.3.8,需要手动更新动态库。

(3)前面已经将gcc8.3.0安装到/usr/local/gcc-8.3.0/目录,最新动态库位于该目录下,通过查找:

$ find /usr/local/gcc-8.3.0/ -name libstdc++.so.6*

(4)删除旧链接:# rm -f /usr/lib64/libstdc++.so.6

(5)创建新链接:

# ln -s /usr/local/gcc-8.3.0/lib64/libstdc++.so.6.0.25 /usr/lib64/libstdc++.so.6

(6)重新查看动态库$ strings /usr/lib64/libstdc++.so.6 | grep CXXABI

Centos7 从源码安装/升级GCC(超详细)_第9张图片

转载于:https://my.oschina.net/panquanxing/blog/3070964

你可能感兴趣的:(Centos7 从源码安装/升级GCC(超详细))