之前讨论了很多关于编译gcc的事情,都源自于当年在CentOS6.2上编译gcc4.7.2的事情,简直苦不堪言。
今天工作需要又要用CentOS了,用于gcc只用了更严格的开源协议GPL v3的问题,CentOS官方所能提供的最新gcc版本只能到4.4,要使用新特性,必须手动编译新版本的gcc。
经过了几年的学习和积累,今天上午轻松通过了当初恶魔般的centos上gcc编译。
知识方面和配置选项含义方面的东西在我前几篇关于编译gcc的blog中有重复的介绍,这里主要讲操作步骤。
参考:http://blog.csdn.net/yanxiangtianji/article/details/12511961
https://gcc.gnu.org/install/
我所使用的系统是CentOS 6.4 64位版。
提醒:建议分配的硬盘空间大于10G,否则可能会出现编译时遭遇磁盘空间不足的问题。
综述:
工具:
tar, gzip, bz2;
gcc, g++, make;
基础库:
glibc-static;
专用库:
浮点数运算相关:gmp, mpfr, mpc;
编译优化相关:cloog, isl;
在实际操作中,这5个专用库都可以不预先编译安装,而可以将源码包解压放置在gcc下的对应名称的子目录中。gcc在编译的时候会自动检查并去编译它们。
2,步骤:
(1) 安装依赖的工具(tar, gzip, bz2, make一般都以及系统自带了);
(2) 安装基础库;
(3) 准备专用库的源码包 / 自行安装;
(4) 配置并启动gcc的编译。
CentOS上的编译步骤
0,下载并解压gcc,创建编译用临时目录
假设下载到了当前目录,文件名为gcc-4.8.1.tar.bz2
tar xfj gcc-4.8.1.tar.bz2
cd gcc-4.8.1
mkdir build
1,安装旧版本的gcc,g++(如果的在安装CentOS的时候没有装的话)
yum install gcc g++
2,安装glibc静态库
yum install glibc-static
3,安装cloog,gmp开发版(后者仅在打算手动编译isl时需要)
yum install cloog-ppl gmp-devel
3’,其他做法:
下载CLooG源码,解压后放置在gcc源码目录下的cloog子目录。然后在编译gcc的时候,它会自动被编译安装。
4,下载编译isl
(CentOS没有提供rpm包,需要手动下载。另外它不是gnu的项目即在gnu的镜像上没有它的主页。如果不嫌版本陈旧的话,为了方便可以直接在gcc项目提供的依赖资源目录里面找:ftp://gcc.gnu.org/pub/gcc/infrastructure/)
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.11.1.tar.bz2
tar xfj isl-0.11.1.tar.bz2
cd isl-0.11.1
./configure
make
make install
4‘,简便做法:
下载isl的源码,解压后放在gcc源码目录下的isl子目录。然后在编译gcc的时候,它会自动被编译安装。
5,下载gmp,mpfr,mpc源码(可以不手动编译)
通过自带脚本一键搞定。
./contrib/download_prerequisites
也可以手动一个个下载源码包,解压后放在gcc源码目录下的gmp,mpfr,mpc子目录。
如果已经通过yum安装过gmp-devel并成功编译安装了isl,那么gmp包可以不再下载了。
脚本中的下载地址是gcc项目组提供的在自己网站上的一个副本,而不是链接到这些项目自己的主页。
这3个项目都是gnu的,gnu镜像中都提供下载,如果在官方网站下载比较慢,可以修改脚本中的下载地址为这些项目各自在国内的gnu镜像的下载地址,需要注意的是要修改版本号为具体项目中的新版本号,因为download_prerequisites脚本中默认些的那些是最低要求,而有些旧版本都已经不提过下载了。
6,配置gcc编译选项
cd build
../configure --prefix=/usr --enable-languages=c,c++ --disable-multilib
不推荐先加"--program-suffix=-4.8.1"再通过配置连接的方式共存两个版本的gcc。
7,编译安装(如果gmp,mpfr,mpc没有编译安装,这一步会自动编译安装它们)
make -j4
make install
编译之后的事
在CentOS下/usr/bin/gcc不同于Ubuntu,前者是一个可执行的二进制文件,后者是一个连接,连接到已经安装的gcc版本如gcc-4.6.3,这一点可以用个调用ls -l来证实。
所以如果想要保留原来的gcc,就必须重命名它们,并且配置连接,这样操作比较复杂,而且CentOS默认的4.4.7的版本不同于Ubuntu默认的4.6,它已经很落后了,而且没有重大的调整,没有必要保留。
原载于http://blog.csdn.net/yanxiangtianji
转载请注明出处