歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 在Ubuntu上編譯GCC會到的問題及解決方法

在Ubuntu上編譯GCC會到的問題及解決方法

日期:2017/2/28 15:33:08   编辑:Linux教程

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