1. 在运行./install_gcc-4.6.2.sh时出现下面错误:gcc configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+从错误中可以看出:GCC编译需要GMP, MPFR, MPC这三个库(有的系统已经安装了就没有这个提示,我的没有安装),有两种安装方法(建议第二种):(1)二进制源码安装(强烈不推荐) 我使用的版本为gmp-4.3.2,mpfr-2.4.2和mpc-0.8.1,在“ftp://gcc.gnu.org/pub/gcc/infrastructure/" 下载,根据提示的顺序分别安装GMP,MPFR和MPC(mpfr依赖gmp,mpc依赖gmp和mpfr),这里全部自己指定了安装目录,如果没有指定 则默认分装在在/usr/include、/usr/lib和/usr/share,管理起来不方便,比如想卸载的时候还得一个个去找:安装gmp: ./configure --prefix=/usr/local/gmp-4.3.2; make install 安装mpfr: ./configure --prefix=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2/; make install 安装mpc: ./configure --prefix=/usr/local/mpc-0.8.1 --with-gmp=/usr/local/gmp-4.3.2/ --with-mpfr=/usr/local/mpfr-2.4.2/; make installPS:安装过程中可能又出现新的错误提示,请看2、3、4条。配置环境变量:我这里指定了安装位置,如果没有指定则 这几个库的默认位置是/usr/local/include和/usr/local/lib,不管有没有指定GCC编译时都可能会找不到这三个库,需要确 认库位置是否在环境变量LD_LIBRARY_PATH中,查看环境变量内容可以用命令 echo LD_LIBRARY_PATH 设置该环境变量命令如下:指定安装:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/gmp-4.3.2/lib:/usr/local/mpfr-2.4.2/lib:/usr/local/mpc-0.8.1/lib 默认安装:exportLD L IBRARY P ATH=" LD_LIBRARY_PATH:/usr/local/libPS:十分不推荐这种安装方法,一般来说这样的确可以成功安装,但是也不排除安装过程中又出现新的问题,具体看问题5。 (2)gcc自带脚本安装(强烈推荐)方法(1)的安装方法十分繁琐,安装过程中可能出现各种预料不到的新错误,因此gcc 源码包中自带了一个gcc依赖库安装脚本download_prerequisites,位置在gcc源码目录中的 contrib/download_prerequisites,因此只需要进入该目录,直接运行脚本安装即可:. /download_prerequisitesPS:该脚本内容如下: #! /bin/sh# Download some prerequisites needed by gcc.# Run this from the top level of the gcc source tree and the gcc# build will do the right thing.## (C) 2010 Free Software Foundation## This program is free software: you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation, either version 3 of the License, or# (at your option) any later version.# # This program is distributed in the hope that it will be useful, but# WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU# General Public License for more details.# # You should have received a copy of the GNU General Public License# along with this program. If not, see http://www.gnu.org/licenses/.MPFR=mpfr-2.4.2GMP=gmp-4.3.2MPC=mpc-0.8.1wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$MPFR.tar.bz2 || exit 1tar xjf $MPFR.tar.bz2 || exit 1ln -sf $MPFR mpfr || exit 1wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$GMP.tar.bz2 || exit 1tar xjf $GMP.tar.bz2|| exit 1ln -sf $GMP gmp || exit 1wget ftp://gcc.gnu.org/pub/gcc/infrastructure/$MPC.tar.gz || exit 1tar xzf $MPC.tar.gz || exit 1ln -sf $MPC mpc || exit 1rm $MPFR.tar.bz2 $GMP.tar.bz2 $MPC.tar.gz || exit 1可见是通过wget的方式下载安装,因此如果没有安装wget则需要先安装下。大家仔细看下这个脚本,发现非常简单,就是从网上自动下载三个依赖库并解压,然后建立三个改名后的软链接分别指向这三个库,这里建立软链接过程中也可能出错,具体看问题6,大家也可以自己修改脚本,改成直接修改名称然后移到gcc目录下。技巧:从这里也可以看出,gcc所依赖的库其实只要解压了放在gcc当前目录下就行了,方法(1)的那么多步骤其实都可以省掉,直接将下载的三个压缩包解压后改名移到gcc下面即可,也不用设置环境变量了。 2. 编译gmp时出现错误:No usable m4 in $PATH or /usr/5bin (see config.log for reasons). 由此可以看出是缺少M4文件。可以去这里下载:http://ftp.gnu.org/gnu/m4/然后编译安装,我由于是Ubuntu系统,就直接sudo apt-get install m4安装了。 3. 安装mpfr时出现错误:configure: error: gmp.h can"t be found, or is unusable.这是因为在安装mpfr时未先安装gmp导致的,mpfr依赖于gmp。 4. 安装mpc时出现错误: configure: error: libgmp not found or uses a different ABI.和configure: error: libmpfr not found or uses a different ABI.“。同样是因为未安装mpc依赖的库gmp和mpfr。 5. 在运行./install_gcc-4.6.2.sh过程中出现错误,即按照gcc过程中出现的问题:(1)libmpfr.so.1: cannot open shared object file: No such file or directory分析:该脚本就是安装gcc,但是如果你出现了问题1,并且使用方法(1)解决该问题,那么你后期就可能出现这样的问题,当然你运气没那么背的话一般不会出现这样的问题,反正我运行比较背,出现了这样的问题。解决方法:可以参考这篇文章http://blog.csdn.net/leo115/article/details/7671819解决。 (2)../../gcc-4.6.2/gcc/realmpfr.h:27:17: fatal error: mpc.h: No such file or directory 分析:gcc没找到所依赖的库mpc,原因很多,最有可能是你没设置环境变量或mpc放的地方不对。解决方法:设置环境变量,看问题1。 (3) /usr/include/stdc-predef.h:30:26: fatal error: bits/predefs.h: No such file or directory分析:用命令“locate bits/predefs.h”找下该头文件的路径,发现是在"/usr/include/x86_64-linux-gnu" 解决方法:设置环境变量: #export C_INCLUDE_PATH=/usr/include/i386-linux-gnu && export CPLUS_INCLUDE_PATH=$C_INCLUDE_PATH (4) /usr/bin/ld: cannot find crti.o: No such file or directory 分析:同样用“locate crti.o” 找下这个文件,在"/usr/lib/i386-linux-gnu/crti.o"。解决方法:设置LIBRARY_PATH (LDFLAGS)这个环境变量如下: #export LIBRARY_PATH=/usr/lib/i386-linux-gnu
(5)unwind-dw2.c:1031: error: field `info" has incomplete type分析:这个错误搞了好久,因为网上找不到对应的解决方法,只说这是gcc的一个bug。解决方法:深入到源文件中,发现错误的地方是这样的: static _Unwind_Reason_Codeuw_frame_state_for (struct _Unwind_Context *context, _Unwind_FrameState *fs){struct dwarf_fde *fde;struct dwarf_cie *cie;const unsigned char *aug, *insn, *end; memset (fs, 0, sizeof (*fs));context->args_size = 0;context->lsda = 0; fde = _Unwind_Find_FDE (context->ra - 1, &context->bases); //这里返回了NULLif (fde == NULL){/* Couldn"t find frame unwind info for this function.Try a target-specific fallback mechanism.This will necessarily not profide a personality routine or LSDA.*/#ifdef MD_FALLBACK_FRAME_STATE_FORMD_FALLBACK_FRAME_STATE_FOR (context, fs, success); // 出错的地方return _URC_END_OF_STACK;success:return _URC_NO_REASON;#elsereturn _URC_END_OF_STACK;//出错返回#endif}.....} 出错的地方用标注了,因为fde返回了NULL,导致不能找到frame unwind info,最重要的是下面这个方法MD_FALLBACK_FRAME_STATE_FOR (context, fs, success);出错了,为什么返回NULL我肯定研究不出来,只知道这个函数调用失败了,导致不成功,于是我的解决方法十分偷懒,就是将下面的两行注释掉了,直接success,哈哈,勿喷我,因为这样做过后就解决了,后面一路成功~~~// MD_FALLBACK_FRAME_STATE_FOR (context, fs, success); // 出错的地方// return _URC_END_OF_STACK; 6. 解决ln -s 软链接产生Too many levels of symbolic links错误 从网上查找了一下原因,原来是建立软连接的时候采用的是相对路径,所以才会产生这样的错误,解决方式是采用绝对路径建立软链接:这样问题就解决了。