CentOS 7手动编译安装gcc高版本
CentOS 7 库里自带的gcc版本比较低,是4.8.xx的,由于它只支持部分 C++ 14,不支持 C++ 17,为了编译高版本时就需要高版本的gcc编译器,最新的版本已经在8.xx了,但考虑到兼容性和依赖包匹配,现在还是建议使用7.5.xx版本的源码进行编译。编译gcc自然也需要gcc,所以CentOS7上还是需要安装gcc和c++的
yum -y install bzip2 wget gcc gcc-c++ gmp-devel mpfr-devel libmpc-devel make zlib zlib-devel
前往gnu站点找到gcc版本的源码,下载gcc,本例使用7.5.0作为范例.(需要注意如系统内gcc版本低,可能无法一次性编译到高版本,如4.8.x直接编译到10.5.0,需在中间选择一个版本作为跳板)
cd /tmp wget https://ftp.gnu.org/gnu/gcc/gcc-7.5.0/gcc-7.5.0.tar.gz tar -zxvf gcc-7.5.0.tar.gz cd gcc-7.5.0
下载编译所需的依赖代码
./contrib/download_prerequisites mkdir gcc-build-7.5 cd gcc-build-7.5
生成makefile文件
../configure --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++,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --enable-gnu-indirect-function --with-tune=generic --disable-multilib
然后编译,使用参数-j ,cpu是四核就j4
make -j$(nproc)
编译耗时比较长,另外要注意swap分区要足够大,或者干脆没有swap分区,否则编译的缓存文件会撑爆然后编译报错,可以考虑临时挂载一个存储介质用来增加swap
查看当前gcc版本
gcc -v
然后安装编译结果的版本
make install
如果没有在编译时特别指定路径的话,默认install的路径是
/usr/local/bin/gcc
查看gcc版本确认版本更新
/usr/local/bin/gcc --version
编辑环境变量
vi ~/.bash_profile 在原PATH=路径内增加 /usr/local/bin 例:PATH=$PATH:$HOME/bin:/usr/local/bin 添加 LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH CC=/usr/local/bin/gcc CXX=/usr/local/bin/g++ export PATH export LD_LIBRARY_PATH export CC export CXX
保存上述更改后执行
source ~/.bash_profile
暂无必要
strings /usr/lib64/libstdc++.so.6 | grep GLIBC find / -xdev -name "libstdc++.so*" cp /usr/local/lib64/libstdc++.so.6.0.24 /usr/lib64/ rm -rf /usr/lib64/libstdc++.so.6 ln -s /usr/local/lib64/libstdc++.so.6.0.24 /usr/lib64/libstdc++.so.6