Centos7.6 默认安装的gcc版本为4.8.5,可通过命令gcc -v
查看,如果需要使用gcc的最新特性,则需要源码安装gcc最新版。
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
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
文件找到原因:
3.将gcc最新依赖包添加到动态链接库:
# vi /etc/ld.so.conf
重新搜索当前系统上所有库文件搜索路径下的库文件,并生成缓存
# 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
使其立即生效# source /etc/profile
7.使用gcc -v
检查gcc版本,是否为gcc-8.3.0
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
可见,最高版本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