在 oracle linux 64位系统上装gcc4.7.0笔记

要想通过源代码安装gcc,必须系统里得有gcc才能进行编译

在oracle linux的光盘里Packages目录下有gcc的rpm包
gcc-4.4.6-3.el6.x86_64.rpm
版本是4.4.6

在安装时发现其依赖以下库 pll, cloog-pll, libmpfr, cpp, kernel-headers, glibc-headers, glibc-devel
这些库的rpm包也在Packages目录下
ppl-0.10.2-11.el6.x86_64.rpm
cloog-ppl-0.15.7-1.2.el6.x86_64.rpm
mpfr-2.4.1-6.el6.x86_64.rpm
cpp-4.4.6-3.el6.x86_64.rpm
kernel-headers-2.6.32-220.el6.x86_64.rpm
glibc-headers-2.12-1.47.el6.x86_64.rpm
glibc-devel-2.12-1.47.el6.x86_64.rpm

依次安装后执行
rpm -i gcc-4.4.6-3.el6.x86_64.rpm
安装gcc成功
其配置入下
./configure –prefix=/usr –mandir=/usr/share/man –infodir=/usr/share/info –with-bugurl=http://bugzilla.redhat.com/bugzilla –enable-bootstrap –enable-shared –enable-threads=posix –enable-checking=release –with-system-zlib –enable-__cxa_atexit –disable-libunwind-exceptions –enable-gnu-unique-object –enable-languages=c,c++,objc,obj-c++,java,fortran,ada –enable-java-awt=gtk –disable-dssi –with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre –enable-libgcj-multifile –enable-java-maintainer-mode –with-ecj-jar=/usr/share/java/eclipse-ecj.jar –disable-libjava-multilib –with-ppl –with-cloog –with-tune=generic –with-arch_32=i686 –build=x86_64-redhat-linux

 

现在可以通过源代码安装新版gcc
在gcc网站上(http://gcc.gnu.org/)查找到下载资源。目前GCC的最新版本为 4.7.1,我选择安装的是4.7.0
安装gcc之前,一定要先装好gmp、mpc、mpfr三个库。另外2个库ppl与cloog库是可选的,装或不装,gcc都能安装好。为了和系统自带的配置保质一致,选择安装这两个库

所有的这些依赖库都可以在http://gcc.gnu.org/找到,下载地址为ftp://gcc.gnu.org/pub/gcc/infrastructure/
最好使用这里给出的依赖库,不然安装可能会出问题
我这里下载的是gmp-4.3.1.tar.bz2,mpfr-3.1.0.tar.bz2,mpc-0.8.1.tar.gz

注:安装均在root权限下进行:

由于MPFR依赖GMP,而MPC依赖GMP和MPFR,所以要先安装GMP,其次MPFR,最后才是MPC。cloog-pll依赖pll,这个也要先装pll,再装cloog-pll

1、安装gmp
解压后在其目录下执行
./configure –enable-cxx
这里需要加上–enable-cxx 以启用 C++ 支持,不然后面安装ppl会失败
make
make check
这一步是必要的,用来查看有没有文件不匹配或缺失,在最后提示,到时注意看有没有 Error 之类的提示,如果没有则说明安装正常.

make install

安装编译后的软件,完成了安装过程
因为没有指定安装目录,默认安装在 /usr/local 下,程序的头文件(.h)和库文件(lib*)会安装在 /usr/local/include 和/usr/local/lib 下

2、安装 mpfr
./configure  –with-gmp-include=/usr/local/include –with-gmp-lib=/usr/local/lib
make
make check
make install

这里配置时需要指定gmp的头文件和库文件所在位置

3、安装 mpc
./configure –with-gmp-include=/usr/local/include –with-gmp-lib=/usr/local/lib –with-mpfr-include=/usr/local/include    –with-mpfr-lib=/usr/local/lib
make
make check (这个时候可能会有错误,但是这个没有关系,可以跳过!)
make install

同样配置时需要指定gmp和mpfr的头文件和库文件所在位置
在编译MPC的过程中出现了“error C2065: 'GMP_RNDA': undeclared identifier”,从网上找到解决方法:将acos.c中的GMP_RND常量前缀替换为MPFR_RND;

4 安装 ppl
安装这个库比较纠结,我从 http://bugseng.com/ 下载了最新版 1.0
执行./configure 时报错
configure: error: C++ preprocessor "/lib/cpp" fails sanity check 
看来是需要c++编译器
从安装光盘中找到 gcc-c++-4.4.6-3.el6.x86_64.rpm 安装重新执行./configure 仍然报错
error: Cannot find GMP version 4.1.3 or higher
但前面已经安装了GMP 4.3.1
从google上找到的解决方法,安装 GMP 时configure加上 –enable-cxx 该参数启用 C++ 支持, 于是重新编译安装 GMP 后再次对ppl进行configure通过

之后对gcc进行configure时还是报 ppl 找不到,我推测是gcc不支持ppl 1.0,重新下载 ppl-0.12.tar.bz2 安装后正常。

./configure
make check
make install

 

5 安装 cloog-ppl
这个库好像也是不支持新版,我下载了 cloog-0.17.0.tar.gz 安装后 gcc configure通不过
只好重新下载 cloog-ppl-0.15.11.tar.gz
这个库需要polylib的支持,不然执行configure会报错 , 但不安装也可以编译通过
checking for PolyhedronTSort in -lpolylib64… no > > >> Can't find PolyLib.
polylib的下载地址  http://icps.u-strasbg.fr/polylib/polylib_src/

./configure –with-ppl
make
make check
make install

 

所有准备工作都就绪后,可以正式开始安装gcc了
为了和系统自带的gcc保持一致,我一开始选择了同样的配置,我没有覆盖,安装到了/opt/gcc-4.7.0下

./configure –prefix=/opt/gcc-4.7.0 –mandir=/usr/share/man –infodir=/usr/share/info –with-bugurl=http://bugzilla.redhat.com/bugzilla –enable-bootstrap –enable-shared –enable-threads=posix –enable-checking=release –with-system-zlib –enable-__cxa_atexit –disable-libunwind-exceptions –enable-gnu-unique-object –enable-languages=c,c++,objc,obj-c++,java,fortran,ada –enable-java-awt=gtk –disable-dssi –with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre –enable-libgcj-multifile –enable-java-maintainer-mode –with-ecj-jar=/usr/share/java/eclipse-ecj.jar –disable-libjava-multilib –with-gmp –with-mpfr –with-mpc –with-ppl –with-cloog –with-tune=generic –with-arch_32=i686 –build=x86_64-redhat-linux

可是在编译时发现,想要加入java的支持,是多么纠结的事啊,各种找不到lib库,找不到文件,而且还需要gtk的支持,gtk+ 的安装似乎也很复杂,需要很多依赖库,对我安装gcc来说不是很必要,而fortran,ada这个对我基本没用,于是改了下配置,只要c和c++

./configure –prefix=/opt/gcc-4.7.0 –enable-bootstrap –enable-shared –enable-threads=posix –enable-checking=release –with-system-zlib –enable-languages=c,c++,objc,obj-c++ –build=x86_64-redhat-linux –with-gmp –with-mpfr –with-mpc –with-ppl –with-cloog –disable-multilib

–disable-multilib 这个参数不加,会报“/usr/include/x86_64-linux-gnu/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory”

make

在编译GCC的过程中出现了“configure: error: cannot compute suffix of object files: cannot compile”的错误,这是因为找不到gmp、mpc、mpfr的lib文件,解决方法是:在/etc/profile文件中加入以下库文件路径:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/opt/gcc-4.7.0/lib,之后运行 source /etc/profile 使其生效
/opt/gcc-4.7.0/lib这个先加上,不然安装完后编译c或者c++的文件时会提示找不到lib,还要再加一次

这一步尝试了10多次,全部失败,后来觉得可能是重复./configure、make失败多次,产生了不少错误的文件,干脆把整个gcc目录全部删了重新编译,经过了将近一个小时后,编译终于成功了

make install

安装完后可以在/opt/gcc-4.7.0/bin下看到有gcc,g++ 等一些文件,都是可用的,但直接执行gcc,还是调用的系统自带的gcc,需要将系统自带的替换成新安装的gcc,方法如下:
将/usr/bin下的gcc,g++等改名为gcc_4.4.6,把/opt/gcc-4.7.0/bin下的gcc,g++ 做软连接到 /usr/bin 下 ln -s /opt/gcc-4.7.0/bin/gcc gcc

 

全部完成后就可以使用新gcc了

此条目发表在未分类分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注