在Ubuntu上编译GCC会到的问题及解决方法


这段时间,我在用软件实现一个3D图形库,因为一些原因,想要使用c++11中的东西。被迫自己编译gcc4.7. 在这个过程中传到了很多的问题,经过不懈的努力终于是成功编译出来了,现在记录一下,算作个备份。

我是在Ubuntu11.10上编译的.会到了如下错误

1.configure错误,说没有gmp,什么的。

2. undefined reference to `lexer_line'

3. fatal error: bits/predefs.h :File or directory not found

4. ld can't find crti.o

相应的解决如下:

1.  apt-get install libgmp10-dev libmpfr-dev libmpc-dev

2.  apt-get install flex bison

3.  4. 在网上下了一个编译脚本,直接运行就行了

下面是且这个脚本编译的过程:

1. 按照上面1和2安装好gmp,等等;

2. 到官网上下载代码放在 $HOME/src/gcc-4.7/files/中

  3. 下载附件中的脚本,修改PKG_SNAPSHOT_VER和TARGET_SYSTEM_TYPE,然后直接运行即可。

  4. 按脚本运行的提示完成最后的工作(比如建立符号链接啊什么的)

脚本如下:

  1. #!/bin/sh  
  2.   
  3. #     Filename: build_gcc-snapshot.sh  
  4. #      Created: 15-Mar-2011  
  5. #        RunAs: user or root  
  6. # Last Changed: 09-Oct-2011  
  7.   
  8. export LANG=C  
  9. export LC_ALL=C  
  10.   
  11. PKG_NAME="gcc"  
  12. PKG_VER="4.7"  
  13. PKG_SNAPSHOT_VER="4.7-20120128"  
  14.   
  15. BASE_DIR="$HOME/src/${PKG_NAME}-${PKG_VER}"  
  16. SRC_DIR="${BASE_DIR}/${PKG_NAME}-${PKG_SNAPSHOT_VER}"  
  17. BUILD_DIR="${BASE_DIR}/gcc-build"  
  18.   
  19. DL_DIR="${BASE_DIR}/files"  
  20. DL_FILE="${PKG_NAME}-${PKG_SNAPSHOT_VER}.tar.bz2"  
  21.   
  22. PATCHES_DIR="${BASE_DIR}/patches"  
  23.   
  24. BUILD_SYSTEM_TYPE=$(dpkg-architecture -qDEB_BUILD_GNU_TYPE)  
  25. HOST_SYSTEM_TYPE=$(dpkg-architecture -qDEB_HOST_GNU_TYPE)  
  26. TARGET_SYSTEM_TYPE="x86_64-linux-gnu"  
  27.   
  28. HOST_SYSTEM_MULTIARCH_TYPE=$(dpkg-architecture -qDEB_HOST_MULTIARCH)  
  29.   
  30. PREFIX="/opt/${PKG_NAME}-${PKG_VER}"  
  31.   
  32. LIB_DIR="${PREFIX}/lib"  
  33. LIB_EXEC_DIR="${PREFIX}/lib"  
  34.   
  35. BUILD_LOG_FILE="${BASE_DIR}/make.log"  
  36.   
  37. GCC_VER_FOR_BUILD="4.6"  
  38. CC_FOR_BUILD="gcc-${GCC_VER_FOR_BUILD}"  
  39. CXX_FOR_BUILD="g++-${GCC_VER_FOR_BUILD}"  
  40. CPP_FOR_BUILD="cpp-${GCC_VER_FOR_BUILD}"  
  41. export CC="${CC_FOR_BUILD}" CXX="${CXX_FOR_BUILD}" CPP="${CPP_FOR_BUILD}"  
  42. echo "##### CC  ... $CC"  
  43. echo "##### CXX ... $CXX"  
  44. echo "##### CPP ... $CPP"  
  45.   
  46. MULTIARCH_FLAGS="-B/usr/lib/${HOST_SYSTEM_MULTIARCH_TYPE} -I/usr/include/${HOST_SYSTEM_MULTIARCH_TYPE}"  
  47.   
  48. export CFLAGS="-g -O2"  
  49. export CXXFLAGS="${CFLAGS}"  
  50. export CFLAGS_FOR_TARGET="${CFLAGS} ${MULTIARCH_FLAGS}"  
  51. export CXXFLAGS_FOR_TARGET="${CXXFLAGS} ${MULTIARCH_FLAGS}"  
  52.   
  53. ##LD_PRELOAD_FOR_BUILD="${PREFIX}/lib/libgcc_s.so.1"  
  54. ##export LD_PRELOAD=${LD_PRELOAD_FOR_BUILD}  
  55.   
  56. MAKE_JOBS="3"  
  57. echo "##### MAKE_JOBS ... ${MAKE_JOBS}"  
  58.   
  59. test -e ${BASE_DIR} || mkdir -p ${BASE_DIR}  
  60. echo "##### Base directory ... ${BASE_DIR}"  
  61.   
  62. echo "##### Unpacking ${DL_FILE} ..."  
  63. tar -xf ${DL_DIR}/${DL_FILE} -C ${BASE_DIR}  
  64. echo "##### Finished unpacking."  
  65.   
  66. test -e ${BUILD_DIR} || mkdir -p ${BUILD_DIR}  
  67. cd ${BUILD_DIR}  
  68. echo "##### Build directory ... $PWD"  
  69.   
  70. # HELP: http://www.linuxfromscratch.org/lfs/view/development/chapter06/gcc.html  
  71. # NOTE: apt-get install libgmp10-dev libmpfr-dev libmpc-dev  
  72. echo "##### Configuring gcc-build ..."  
  73. ../${PKG_NAME}-${PKG_SNAPSHOT_VER}/configure \  
  74.     --prefix=${PREFIX} \  
  75.     --libdir=${LIB_DIR} \  
  76.     --libexecdir=${LIB_EXEC_DIR} \  
  77.     --program-suffix=-${PKG_VER} \  
  78.     --enable-clocale=gnu \  
  79.     --enable-languages=c,c++ \  
  80.     --enable-shared \  
  81.     --enable-threads=posix \  
  82.     --disable-bootstrap \  
  83.     --disable-libssp \  
  84.     --disable-multilib \  
  85.     --disable-nls \  
  86.     --with-system-zlib \  
  87.     --without-cloog \  
  88.     --without-ppl \  
  89.     --with-arch-32=i586 --with-tune=generic \  
  90.     --build=${BUILD_SYSTEM_TYPE} --host=${HOST_SYSTEM_TYPE} --target=${TARGET_SYSTEM_TYPE}  
  91. echo "##### Finished configuring."  
  92.   
  93. echo "##### Compiling gcc-build ..."  
  94. make FLAGS_FOR_TARGET="${FLAGS_FOR_TARGET} ${MULTIARCH_FLAGS}" -j${MAKE_JOBS} 2>&1 | tee ${BUILD_LOG_FILE}  
  95. echo "##### Finished compiling."  
  96.   
  97. echo "NOTE #1: Before installing your shiny new gcc run the gcc-testsuite to check your build is OK!"  
  98.   
  99. echo "NOTE #2: Don't forget to generate symlinks in system's bin directory!"  
  100. echo "EXAMPLE: sudo ln -sf ${PREFIX}/bin/${PKG_NAME}-${PKG_VER} /usr/bin/${PKG_NAME}-${PKG_VER}"  
  101.   
  102. echo "NOTE #3: Don't forget to add ${PREFIX}/lib' to /etc/ld.so.conf.d/${TARGET_SYSTEM_TYPE}.conf!"  
  103. echo "EXAMPLE: sudo ldconfig -v"  

相关内容