最近刚配置了一个新的linux环境,新的linux环境的gcc默认是4.8.5的当前的很多环境下是很落后的,我最近在更新gcc的时候,也趟过了一遍了,下面就是我更新gcc的一些步骤
需要准备的相关文件:
mpfr下载地址:gnu-mpfr安装包下载_开源镜像站-阿里云 (aliyun.com)
简单版本(这个后面写的,如果有不懂的可以去看复杂版本):
只需要下载:gcc
解压gcc:tar -vxf gcc-10.1.0.tar.gz
打开文件夹:cd:gcc-9.3.0
创建文件夹build(名字一般不强求):mkdir build & cd build
安装gcc所需依赖项: ../.contrib/download_prerequisites(这个会自动安装gmp 、mpfr、mpc)
生成Makefile文件:…/configure --prefix=/usr/local/gcc-9.3.0 --enable-bootstrap --enable-checking=release --enable-languages=c,c++ --disable-multilib
–-enable-languages表示你要让你的gcc支持哪些编程语言
--disable-multilib表示编译器不编译成其他平台的可执行代码;
--disable-checking表示生成的编译器在编译过程中不做额外检查
--enable-checking=xxx 表示编译过程中增加XXX检查
--prefix=/usr/local/gcc-9.3.0 指定安装路径–enable-bootstrap 表示用第一次编译生成的程序进行第二次编译,然后用再次生成的程序进行第三次编译,并且检查比较第二次和第三次结果的正确性,也就是进行冗余的编译检查工作。 非交叉编译环境下,默认已经将该值设为 enable,可以不用显示指定;交叉编译环境下,需要显示将其值设为 disable
编译生成makefile文件,并安装
make -j8 && make install
设置环境变量、头文件
touch /etc/profile.d/gcc.sh
sudo chmod 777 /etc/profile.d/gcc.sh
sudo echo -e ‘\nexport PATH=/usr/local/gcc-9.3.0/bin:$PATH\n’ >> /etc/profile.d/gcc.sh && source /etc/profile.d/gcc.sh
sudo ln -sv /usr/local/gcc/include/ /usr/include/gcc
设置库文件、 加载动态连接库
touch /etc/ld.so.conf.d/gcc.confsudo chmod 777 /etc/ld.so.conf.d/gcc.conf
touch /etc/ld.so.conf.d/gcc.confsudo chmod 777 /etc/ld.so.conf.d/gcc.conf
sudo ldconfig -v
ldconfig -p |grep gcc
安装完成:gcc-v
ps:文件的版本尽量不于其他几个包的版本差距过大,容易出现安装错误,下面是我安装的版本
gcc是:10.1.0,gmp是:5.0.2,mpfr是:3.1.5,mpc是:1.0.1
在安装gcc之前,必须安装GMP 4.2或更高版本、mpfr2.3. 1或更高版本、MPC0.8. 0或更高版本。(这是底线~)
复杂版本(第一次安装)
一、GMP编译
1. 解压
tar -vxf gmp-5.0.2.tar.bz2
2. 编译
进入文件夹:cd gmp-5.0.1/
运行: ../configure --prefix=/usr/local/gmp-5.0.2
编译: make
安装: sudo make install
二、MPFR编译
1. 解压
tar -vxf mpfr-3.1.5.tar.xz
2. 编译
进入文件夹:cd mpfr-3.1.5/
运行: ./configure --prefix=/usr/local/mpfr-3.1.5 --with-gmp=/usr/local/gmp-5.0.2
ps:其中--with=/usr/local/gmp-5.0.2是依赖关系,/usr/local/gmp-3.1.5是gmp的安装目录
编译: make
安装: sudo make install
三、MPC编译
1. 解压
tar -vxf mpfr-3.1.5.tar.xz
2. 编译
进入文件夹:tar -vxf mpc-1.0.1.tar.gz
运行: ./configure --prefix=/usr/local/mpc-1.0.1 --with-gmp=/usr/local/gmp-5.0.2 --with-mpfr=/usr/local/mpfr-3.1.5
ps:记得后面两项的依赖项,也就是你的gmp和mpfr的安装目录
编译: make
安装: sudo make install
linux下安装gmp遇到 configure:error:no usable m4 in$path or /user/5bin解决方法:
上面的报错是因为你没有安装m4,安装m4就可以了;以下两种命令二选其一:
#yum install m4或 #apt-get install m4
ps:如果遇到权限问题就在命令签名加上 sudo 来执行;
四、GCC编译
1. 解压
tar -vxf gcc-10.1.0.tar.gz
2. 编译
进入文件夹:cd gcc-10.1.0
创建文件夹:mkdir build
进入文件夹:cd build
运行: ../configure --prefix=/usr/local/gcc-10.1.0/ --enable-checking=release --enable-languages=c,c++ --disable-multilib --with-gmp=/usr/local/gmp-5.0.2 --with-mpfr=/usr/local/mpfr-3.1.5 --with-mpc=/usr/local/mpc-1.0.1
ps:原指令$ ${srcdir}/configure --prefix=${destdir} [其它选项]
安装的时候记得把真实目录替换掉${srcdir}和${destdir}
gcc安装的地方,用${destdir}表示
{srcdir}表示当前文件的位置
编译: make /*这里可以是用make -j4 条件好的可以使用make -j8 -j12 -j16 后面的取决于你电脑的线程数量 可以提高编译速度*/
/*这里编译时间很长 一个小时左右*/
安装: sudo make install
安装好后还得进行相关的链接:
移动相关的文件
mv/usr/bin/gcc/usr/bin/gcc485
mv/usr/bin/g++ /usr/bin/g++485
mv/usr/bin/c++ /usr/bin/c++485
mv/usr/bin/cc/usr/bin/cc485
链接文件
ln-s /usr/local/gcc-10.1.0/bin/gcc/usr/bin/gcc
ln-s /usr/local/gcc-10.1.0/bin/g++ /usr/bin/g++
ln-s /usr/local/gcc-10.1.0/bin/c++ /usr/bin/c++
ln-s /usr/local/gcc-10.1.0/bin/gcc/usr/bin/cc
备份和链接
mv/usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak
ln-s /usr/local/gcc-10.1.0/lib64/libstdc++.so.6.0.28 /usr/lib64/libstdc++.so.6
最后就可以通过gcc-v查看当前的 gcc版本
关于GCC降级从10.0.1降到9.3.0
这个我刚开始的时候以为是和第一次安装一样的 但是到了gccmake的时候就出现了:
make[2]: Leaving directory '/home/chen/gcc-9.3.0/build' Makefile:23010: recipe for target 'stage1-bu
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages
make[1]: Leaving directory '/home/chen/gcc-9.3.0/build' Makefile:993: recipe for target 'all' failed
等相应的问题找了很多的方法,最后得出的结论就是,高版本的编译器不能编译低版本的编译器
然后我卸载了当前的gcc g++
指令:sudo apt-get remove gcc g++
然后重新安装了系统的gcc g++
sudo apt-get install gcc g++
然后安装相应的版本就可以了
ps:这里的删除不是删除了你之前安装的高版本编译器,只是删除了相应的链接文件
后面想要使用高版本连接回来就可以了。