CentOS升级gcc

升级前准备工作:
因gcc依赖mpc、gmp、mpfr三个包,因此需要先下载依赖包进行升级(可以选择不同的依赖包版本)
mpc: wget ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
gmp: wget ftp://ftp.gnu.org/gnu/gmp/gmp-5.0.0.tar.gz
mpfr: wget ftp://ftp.gnu.org/gnu/mpfr/mpfr-3.0.0.tar.gz
gcc: wget http://ftp.gnu.org/gnu/gcc/gcc-4.9.2/gcc-4.9.2.tar.bz2

编译安装 mpc

1
2
3
$ tar -zxf mpc-1.0.3.tar.gz
$ cd mpc-1.0.3
$ ./configure && make && make install

编译安装 mpfr

1
2
3
$ tar -zxf mpfr-3.0.0.tar.gz
$ cd mpfr-3.0.0
$ ./configure && make && make install

编译安装 gmp

1
2
3
$ tar -zxf gmp-5.0.0.tar.gz
$ cd gmp-5.0.0
$ ./configure && make && make install

编译安装 gcc

下载编译所需的依赖项

1
2
3
4
$ tar -jxf gcc-4.9.2.tar.bz2
$ cd gcc-4.9.2
$ ./contrib/download_prerequisites
$ cd ..

建立编译输出目录

1
$ mkdir gcc-build-4.9.2

生成makefile文件

1
2
$ cd gcc-build-4.9.2
$ ../gcc-4.9.2/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

gcc 编译参数说明:

–enable-languages //指定 gcc 能编译哪些语言的文件,每种语言用逗号分隔, 例如 c,c++,Java。
–disable-multilib //默认 gcc 能在32位系统上将代码编译成64位程序,或者在64位系统上编译成32位程序,如果加上这个编译选项则表示关闭这个gcc的交叉编译功能。

执行编译

1
$ make -j4 && make install

注:如果机器是单核就直接make && make install ,参数-j4是利用多核编译,便以速度要快很多。

gcc编译常见错误:

错误一:“—make[5]: * [s-attrtab] Killed” 是因为内存不足,可以分配交换空间来支持,具体操作如下:

1
$ dd if=/dev/zero of=/tmp/myswap bs=32k count=32768

(bs=32k指定每个扇区占用32kb,读入了32768个区段,输出了32768个区段,bs参数的目的在于指定每次读取及输入多少个bytes;由于磁盘存取的最小单位为扇区,因此设置bs也等于设置每个扇区的大小;而count的目的则在指定可以使用多少个扇区.因此,可以使用的硬盘空间就等于bscount.以上范例为例,可以使用的硬盘空间等于3232768=1048576(KB),亦等于1G)
格式化swap文件执行mkswap命令,将myswap文件格式化成s文件系统,系统才能使用,切换到/tmp目录,并执行以下命令:

1
$ mkswap /tmp/myswap

启动swap分区

1
$ swapon /tmp/myswap

如果需要停止则执行 swapoff /tmp/myswap
检查swap分区

1
$ free -g/-m

错误二: “make[2]: *** [configure-stage1-libcpp]Error 1 ”是因为缺少gcc-c++

执行如下命令:

1
$ yum install gcc-c++

设置GLIBC

1
$ cd /usr/lib64

删除原软链

1
$ rm -rf libstdc++.so.6

拷贝GCC编译的新版本libstdc

1
$ cp -r /usr/loca/lib64/libstdc++.so.0.21 /usr/lib64/

创建软链

1
$ ln -s libstdc++.so.6.0.21 libstdc++.so.6

(The End)

坚持原创技术分享,您的支持将鼓励我继续创作!