centos7中gcc 10的安装
1.全编译安装(截止20200902最新版比较适合大陆自行搭建测试)
# 如果内存偏小的比如4G以下的,加大交换分区容量,查看 http://loulin.bid/9.html
# 典型错误1: g++: internal compiler error: Killed (program cc1plus)
# 典型错误2:make[3]: *** [s-recog] Error 137等等
yum -y install make gcc-c++ gcc-gnat libgcc glibc-devel bison flex texinfo build-essential wget gcc m4 zip glibc-static bzip2 tmux
mkdir /home/gcc #创建目录/data/gcc
cd /home/gcc
wget ftp://ftp.gnu.org/gnu/automake/automake-1.16.2.tar.gz # 下载 http://ftp.gnu.org/gnu/automake/
wget https://gmplib.org/download/gmp/gmp-6.2.0.tar.gz #依赖下载gmp 版本获取 https://gmplib.org/download/gmp/
wget http://www.mpfr.org/mpfr-current/mpfr-4.1.0.tar.gz #依赖下载mpfr 版本获取 https://www.mpfr.org/mpfr-current/
wget ftp://ftp.gnu.org/gnu/mpc/mpc-1.2.0.tar.gz #依赖下载mpc 获取 ftp://ftp.gnu.org/gnu/mpc/
wget http://ftp.gnu.org/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.gz #下载gcc 获取 http://ftp.gnu.org/gnu/gcc/
# http://dl.loulin.bid:88/linux/package/gcc/gcc-10.1.0.tar.gz
#内存太小的4G以下,建议使用yum安装方式安装,文后有介绍.
tar zxvf automake-1.16.2.tar.gz
cd automake-1.16.2
./configure --prefix=/usr/local/automake
make -j #低配慎用参数
make install
#rpm -e --nodeps automake
#如果有卸载老版本,没有删除 rm -rf /usr/bin/automake
# rm -rf /usr/local/automake
ln -s /usr/local/automake/bin/automake /usr/bin/automake
#edit export path
echo "export PATH=$PATH:/usr/local/automake/bin" >> /etc/profile
echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/gcc/mpc/lib:/usr/local/gcc/gmp/lib:/usr/local/gcc/mpfr/lib" >> /etc/profile
source /etc/profile
cd ..
tar zxvf gmp-6.2.0.tar.gz
cd gmp-6.2.0
./configure --prefix=/usr/local/gcc/gmp --build=x86_64-linux
make -j && make install
cd ..
tar -zxvf mpfr-4.1.0.tar.gz
cd mpfr-4.1.0
./configure --prefix=/usr/local/gcc/mpfr --with-gmp=/usr/local/gcc/gmp
make -j && make install
cd ..
tar -zxvf mpc-1.2.0.tar.gz
cd mpc-1.2.0
./configure --prefix=/usr/local/gcc/mpc --with-gmp=/usr/local/gcc/gmp -with-mpfr=/usr/local/gcc/mpfr
make -j && make install
cd ..
tar -zxvf gcc-10.2.0.tar.gz
cd gcc-10.2.0
./configure --prefix=/usr/local/gcc --enable-threads=posix --disable-checking --enable-bootstrap --enable--long-long --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local/gcc/gmp --with-mpfr=/usr/local/gcc/mpfr --with-mpc=/usr/local/gcc/mpc
make -j && make install
#备份并创建软连接
mv /usr/bin/gcc /usr/bin/gcc-bak
mv /usr/bin/g++ /usr/bin/g++-bak
mv /usr/bin/c++ /usr/bin/c++-bak
ln -s /usr/local/gcc/bin/gcc /usr/bin/gcc
ln -s /usr/local/gcc/bin/c++ /usr/bin/c++
ln -s /usr/local/gcc/bin/g++ /usr/bin/g++
rm /usr/lib64/libstdc++.so.6
ln -s /usr/local/gcc/lib64/libstdc++.so.6.0.28 /usr/lib64/libstdc++.so.6
echo "export PATH=/usr/local/gcc/bin:$PATH" >> /etc/profile
source /etc/profile
2.减少依赖编译安装(适合非大陆环境)
# 使用自带的检查安装依赖
yum -y install make gcc-c++ gcc glibc-static bzip2 wget tmux
mkdir /home/gcc #创建目录/home/gcc
cd /home/gcc
wget http://ftp.gnu.org/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.gz
tar -zxvf gcc-10.2.0.tar.gz
cd gcc-10.2.0
./contrib/download_prerequisites
./configure --prefix=/usr/local/gcc --enable-threads=posix --enable-checking=release --enable-languages=c,c++ --disable-multilib --enable-bootstrap --enable--long-long
make -j # 低配使用make就好了
make install
#配置
mv /usr/bin/gcc /usr/bin/gcc-4.8.5
mv /usr/bin/g++ /usr/bin/g++-4.8.5
alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8.5 10 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8.5
alternatives --install /usr/bin/gcc gcc /usr/local/gcc/bin/gcc-10.2.0 20 --slave /usr/bin/g++ g++ /usr/local/gcc/bin/g++-10.2.0
alternatives --config gcc #选择 最新版本即可
echo "export PATH=/usr/local/gcc/bin:$PATH" >> /etc/profile #添加环境变量
source /etc/profile
ln -sv /usr/local/gcc/include/ /usr/include/gcc # 添加头文件链接
vi /etc/ld.so.conf #库文件
/lib
/lib64
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64
/usr/local/gcc/lib
/usr/local/gcc/lib64
/usr/local/gcc/gmp/lib
/usr/local/gcc/mpc/lib
/usr/local/gcc/mpfr/lib
# echo "/usr/local/gcc/lib64" >> /etc/ld.so.conf.d/gcc.conf
ldconfig -v #生成库文件缓存
ldconfig -p |grep gcc
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
ll /usr/lib64/libstdc++.so.6 $ lrwxrwxrwx 1 root root 19 Aug 23 11:57 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.19
rm -f /usr/lib64/libstdc++.so.6
ln -s /usr/local/gcc/lib64/libstdc++.so.6.0.28 /usr/lib64/libstdc++.so.6
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
3.yum安装gcc(简单易上手)
# 查看gcc版本,centos7.*默认安装4.8.5
gcc -v
# 升级gcc到5及以上,yum list devtoolset,需要某个版本,修改devtoolset版本号即可;
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
# 需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
# 如果要长期使用gcc 9.3使用下面命令,退出shell重新打开也是新版的gcc
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
gcc -v
4.编译参数说明
--prefix=/usr/local/ 指定安装路径
--enable-bootstrap 这里引用网上一些文献对该参数的解释:用第一次编译生成的程序进行第二次编译,然后用再次生成的程序进行第三次编译,并且检查比较第二次和第三次结果的正确性,也就是进行冗余的编译检查工作。 非交叉编译环境下,默认已经将该值设为 enable,可以不用显示指定;交叉编译环境下,需要显示将其值设为 disable。
--enable-checking=release 以软件发布版的标准来对编译时生成的代码进行一致性检查;设置该选项为 enable并不会改变编译器生成的二进制结果,但是会导致编译的时间增加;该选项仅支持gcc编译器; 总体而言,对于上面这个选项,机器的硬件配置较低,以及不愿等待太久编译时间的童鞋,可以设置为 disable;但是这会增加产生未预期的错误的风险,所以应该慎用。 可以同时设置 --disable-bootstrap 与 --disable-checking,这对编译过程的提速很有帮助。
--enable-threads=posix 顾名思义,启用posix标准的线程支持 ,要让程序能在符合POSIX规范的linux发布版上正确运行,就应该启用该选项,取决于宿主或目标操作系统的类型,其它可用值有:aix,dec,solaris,win32等,如果你是其它的类UNIX系统,就需要设置相应的值。
--enable-languages=c,c++ 支持的高级语言类型和运行时库,可以设置的所有语言包括 ada,c,c++,Fortran,java,objc,obj-c++,GO 等语言。这里只开启了c和c++,因为支持的语言越多,就需要安装越多的相应静态与动态库,还有五花八门的依赖库,这会让管理变得困难,体积也会变得庞大。
--disable-multilib 如果你的操作系统是32位,默认就已经设置为 disable,这意味着gcc仅能生成32位的可执行程序;如果你的操作系统是64位,默认就已经设置为 enable,这意味着用gcc编译其它源文件时可以通过 -m32 选项来决定是否生成32位机器代码。如果在64位系统上,要禁止生成32位代码, 设置 --disable-multilib。
--enable-gather-detailed-mem-stats 允许收集详细的内存使用信息,如果设置该参数为 enable,则将来编译好的gcc可执行程序,可以通过 -fmem-report 选项来输出编译其它程序时的实时内存使用情况。
--with-long-double-128 指定 long double 类型为128位(16字节!);设置为 without,则 long double类型将为64位(8字节),这将与普通的 double 类型一样。 基于 Glib 2.4以上版本编译时,默认已经是128位。