现在的位置: 首页 > 综合 > 正文

(转)安装GCC4.6.0的过程

2018年07月05日 ⁄ 综合 ⁄ 共 4133字 ⁄ 字号 评论关闭

首先向原作者致敬,木有找到原作者的blog。无法添加文章的原始地址,见谅。

 

1、到ftp://ftp.dti.ad.jp/pub/lang/gcc/下载该版本的gcc源代码包,其实主要用到的是ftp://ftp.dti.ad.jp/pub/lang/gcc/releases/gcc-4.6.0/里面的gcc-4.6.0.tar.bz2包,以及可能需要ftp://ftp.dti.ad.jp/pub/lang/gcc/infrastructure/里面的gmp-4.3.2.tar.bz2、mpc-0.8.1.tar.gz、mpfr-2.4.2.tar.bz2三个包,见后面。

2. 解压缩

  根据压缩格式,选择下面相应的一种方式解包(以下的“%”表示命令行提示符):

  % tar xzvf gcc-4.3.3.tar.gz

  或者

  % bzcat gcc-4.3.3.tar.bz2 | tar xvf -

  新生成的gcc-4.3.3这个目录被称为源目录,用${srcdir}表示它。以后在出现${srcdir}的地方,应该用真实的路径来替换它。用pwd命令可以查看当前路径。

  在${srcdir}/INSTALL目录下有详细的GCC安装说明,可用浏览器打开index.html阅读。

  3. 建立目标目录

  目标目录(用${objdir}表示)是用来存放编译结果的地方。GCC建议编译后的文件不要放在源目录${srcdir]中(虽然这样做也可以),最好单独存放在另外一个目录中,而且不能是${srcdir}的子目录。

  例如,可以这样建立一个叫 gcc-build 的目标目录(与源目录${srcdir}是同级目录):

  % mkdir gcc-build

  % cd gcc-build

  以下的操作主要是在目标目录 ${objdir} 下进行。

  4. 配置

  配置的目的是决定将GCC编译器安装到什么地方(${destdir}),支持什么语言以及指定其它一些选项等。其中,${destdir}不能与${objdir}或${srcdir}目录相同。

  配置是通过执行${srcdir}下的configure来完成的。其命令格式为(记得用你的真实路径替换${destdir}):

  % ${srcdir}/configure --prefix=${destdir} [其它选项]

  例如,如果想将GCC 4.3.3安装到/usr/local/gcc-4.3.3目录下,则${destdir}就表示这个路径。

  在我的机器上,我是这样配置的:

  % ../gcc-4.3.3/configure --prefix=/usr/local/gcc-4.3.3 --enable-threads=posix --disable-checking --enable--long-long --with-system-zlib --enable-languages=c,c++,java

  将GCC安装在/usr/local/gcc-4.3.3目录下,支持C/C++和JAVA语言,其它选项参见GCC提供的帮助说明。

  5. 编译

  % make

  这是一个漫长的过程。在我的机器上(P4-1.6),这个过程用了50多分钟。

  6. 安装

  执行下面的命令将编译好的库文件等拷贝到${destdir}目录中(根据你设定的路径,可能需要管理员的权限):

  % make install

  至此,GCC 4.3.3安装过程就完成了。

  6. 其它设置

  GCC 3.4.0的所有文件,包括命令文件(如gcc、g++)、库文件等都在${destdir}目录下分别存放,如命令文件放在bin目录下、库文件在lib下、头文件在include下等。由于命令文件和库文件所在的目录还没有包含在相应的搜索路径内,所以必须要作适当的设置之后编译器才能顺利地找到 并使用它们。

  6.1 gcc、g++、gcj的设置

  最简单的方法就是把它的路径${destdir}/bin放在环境变量PATH中。

在文件/etc/profile中最后添加一句:

export PATH=$PATH:/usr/local/gcc-4.3.3/bin

  6.2 库路径的设置

  在文件/etc/profile中最后添加一句:

  setenv LD_LIBRARY_PATH /usr/local/gcc-4.3.3/lib:$LD_LIBRARY_PATH

  7. 测试

  编译你以前的C、C++程序,检验新安装的GCC编译器是否能正常工作。

  8. 根据需要,可以删除或者保留${srcdir}和${objdir}目录。

附录:问题解决

配置gcc的过程中出现错误:gcc configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+

说明要安装gcc需要GMP、MPFR、MPC这三个库,于是又从网上下了三个库的压缩包。由于MPFR依赖GMP,而MPC依赖GMP和 MPFR,所以要先安装GMP,其次MPFR,最后才是MPC。这里三个库我用的版本分别是gmp5.0.1,mpfr2.4.2和mpc0.8.1。
[这里要注意的是:mpfr的版本不易最新, 最新的版本结果出错了]

先开始安装GMP。解压GMP的压缩包后,得到源代码目录gmp-5.0.1。在该目录的同级目录下建立一个临时的编译目录,这里命名为gmp-build。然后开始配置安装选项,进入gmp-build目录,输入以下命令进行配置:

$ sudo ar jxf gmp-5.0.1.tar.bz2

$ cd gmp-5.0.1

$make

$make check

这一步是必要的,用来查看有没有文件不匹配或缺失,在最后提示,到时注意看有没有Erro之类的提示,如果没有说明安装正常了. 本人安装过程中没有出现错误, 如果网友编译过程中出了问题记得告诉我.

这里–prefix选项代表要将该库安装在哪里,我是装在/usr/local/gmp-5.0.1目录下,后面的安装都会用到这个选项。

make

make check

sudo make install

这样就安装好了gmp。mpfr和mpc的安装方法与此类似。不过要注意配置的时候要把依赖关系选项加进去,具体后面两个库配置命令如下:

../mpfr-2.4.2/configure –prefix=/usr/local/mpfr-2.4.2 –with-gmp=/usr/local/gmp-5.0.1

../mpc-0.8.1/configure –prefix=/usr/local/mpc-0.8.1 –with-gmp=/usr/local/gmp-5.0.1 –with-mpfr=/usr/local/mpfr-2.4.2

安装好这三个库之后,就可以正式开始安装gcc了。

与此前一样,先建一个编译gcc的临时目录gcc-build,进入该目录后配置安装选项:

../gcc-4.6.0/configure –prefix=/usr/local/gcc-4.6.0 –enable-threads=posix –disable-checking –disable-multilib –enable-languages=c,c++
–with-gmp=/usr/local/gmp-5.0.1 –with-mpfr=/usr/local/mpfr-2.4.2 –with-mpc=/usr/local/mpc-0.8.1

gcc的配置选项有很多,具体可以参考gcc源文件目录下的安装说明。这里只安装了c和c++的编译器。然后开始make编译。本来以为就可以 大功告成了,结果在编译途中又出现了错误:error while loading shared libraries: libmpc.so.2: cannot open shared object file: No such file or directory

在网上找到了解决方法,需要添加环境变量LD_LIBRARY_PATH以指出前面三个库的位置,键入以下命令:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc-0.8.1/lib:/usr/local/gmp-5.0.1/lib:/usr/local/mpfr-2.4.2/lib

然后重新make编译,这里最令我郁闷的事情发生了,编译到一半的时候突然报错说磁盘空间不足。我现在才发现当时装系统的时候这个目录所在的分区分太小了,我要吐血了。。。没办法只好换了个分区重新编译。

在经过漫长的2小时等待后,终于编译完成。在安装说明里面还有测试这一步,不过那是可选的,我也没耐心去测试了。直接make install安装,至此gcc就全部安装完成了。不过目前还不能使用新版本的gcc,因为新版的可执行文件还没加到命令的搜索路径中。在这里我为新版的 gcc和g++命令分别建立了一个软链接。进入/usr/bin目录后,键入如下命令建立软链接。

ln -s /usr/local/gcc-4.5.0/bin/gcc gcc46
ln -s /usr/local/gcc-4.5.0/bin/g++ g++46

这样我使用新版本gcc的时候就可以用gcc45和g++45命令,同时也可使用原来的gcc编译程序。当然这里也可以直接将/usr/bin 目录下gcc,g++命令重新链接到新版本的gcc可执行文件。在正式使用之前还有最后一个工作要做,就是将前面安装的三个库的路径加进环境变量 LD_LIBRARY_PATH中,不然在编译程序的时候会出错。由于我不想每次编译程序都生成环境变量,所以需要编辑/etc目录下的 bash.bashrc文件配置shell环境。在这个文件中添加以下语句:

LD_LIBRARY_PATH=:/usr/local/mpc-0.8.1/lib:/usr/local/gmp-5.0.1/lib:/usr/local/mpfr-2.4.2/lib:/usr/local/gcc-4.6.0/lib
export LD_LIBRARY_PATH

保存重启系统后,就可以使用新装的gcc了。

抱歉!评论已关闭.