zoukankan      html  css  js  c++  java
  • 在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.  a

    pt-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. 按脚本运行的提示完成最后的工作(比如建立符号链接啊什么的)

     脚本如下:

    View Code
    #!/bin/sh

    # Filename: build_gcc-snapshot.sh
    #
    Created: 15-Mar-2011
    #
    RunAs: user or root
    #
    Last Changed: 09-Oct-2011

    export LANG=C
    export LC_ALL=C

    PKG_NAME="gcc"
    PKG_VER="4.7"
    PKG_SNAPSHOT_VER="4.7-20120128"

    BASE_DIR="$HOME/src/${PKG_NAME}-${PKG_VER}"
    SRC_DIR="${BASE_DIR}/${PKG_NAME}-${PKG_SNAPSHOT_VER}"
    BUILD_DIR="${BASE_DIR}/gcc-build"

    DL_DIR="${BASE_DIR}/files"
    DL_FILE="${PKG_NAME}-${PKG_SNAPSHOT_VER}.tar.bz2"

    PATCHES_DIR="${BASE_DIR}/patches"

    BUILD_SYSTEM_TYPE=$(dpkg-architecture -qDEB_BUILD_GNU_TYPE)
    HOST_SYSTEM_TYPE=$(dpkg-architecture -qDEB_HOST_GNU_TYPE)
    TARGET_SYSTEM_TYPE="x86_64-linux-gnu"

    HOST_SYSTEM_MULTIARCH_TYPE=$(dpkg-architecture -qDEB_HOST_MULTIARCH)

    PREFIX="/opt/${PKG_NAME}-${PKG_VER}"

    LIB_DIR="${PREFIX}/lib"
    LIB_EXEC_DIR="${PREFIX}/lib"

    BUILD_LOG_FILE="${BASE_DIR}/make.log"

    GCC_VER_FOR_BUILD="4.6"
    CC_FOR_BUILD="gcc-${GCC_VER_FOR_BUILD}"
    CXX_FOR_BUILD="g++-${GCC_VER_FOR_BUILD}"
    CPP_FOR_BUILD="cpp-${GCC_VER_FOR_BUILD}"
    export CC="${CC_FOR_BUILD}" CXX="${CXX_FOR_BUILD}" CPP="${CPP_FOR_BUILD}"
    echo "##### CC ... $CC"
    echo "##### CXX ... $CXX"
    echo "##### CPP ... $CPP"

    MULTIARCH_FLAGS="-B/usr/lib/${HOST_SYSTEM_MULTIARCH_TYPE} -I/usr/include/${HOST_SYSTEM_MULTIARCH_TYPE}"

    export CFLAGS="-g -O2"
    export CXXFLAGS="${CFLAGS}"
    export CFLAGS_FOR_TARGET="${CFLAGS} ${MULTIARCH_FLAGS}"
    export CXXFLAGS_FOR_TARGET="${CXXFLAGS} ${MULTIARCH_FLAGS}"

    ##LD_PRELOAD_FOR_BUILD="${PREFIX}/lib/libgcc_s.so.1"
    #
    #export LD_PRELOAD=${LD_PRELOAD_FOR_BUILD}

    MAKE_JOBS="3"
    echo "##### MAKE_JOBS ... ${MAKE_JOBS}"

    test -e ${BASE_DIR} || mkdir -p ${BASE_DIR}
    echo "##### Base directory ... ${BASE_DIR}"

    echo "##### Unpacking ${DL_FILE} ..."
    tar -xf ${DL_DIR}/${DL_FILE} -C ${BASE_DIR}
    echo "##### Finished unpacking."

    test -e ${BUILD_DIR} || mkdir -p ${BUILD_DIR}
    cd ${BUILD_DIR}
    echo "##### Build directory ... $PWD"

    # HELP: http://www.linuxfromscratch.org/lfs/view/development/chapter06/gcc.html
    #
    NOTE: apt-get install libgmp10-dev libmpfr-dev libmpc-dev
    echo "##### Configuring gcc-build ..."
    ../${PKG_NAME}-${PKG_SNAPSHOT_VER}/configure \
    --prefix=${PREFIX} \
    --libdir=${LIB_DIR} \
    --libexecdir=${LIB_EXEC_DIR} \
    --program-suffix=-${PKG_VER} \
    --enable-clocale=gnu \
    --enable-languages=c,c++ \
    --enable-shared \
    --enable-threads=posix \
    --disable-bootstrap \
    --disable-libssp \
    --disable-multilib \
    --disable-nls \
    --with-system-zlib \
    --without-cloog \
    --without-ppl \
    --with-arch-32=i586 --with-tune=generic \
    --build=${BUILD_SYSTEM_TYPE} --host=${HOST_SYSTEM_TYPE} --target=${TARGET_SYSTEM_TYPE}
    echo "##### Finished configuring."

    echo "##### Compiling gcc-build ..."
    make FLAGS_FOR_TARGET="${FLAGS_FOR_TARGET} ${MULTIARCH_FLAGS}" -j${MAKE_JOBS} 2>&1 | tee ${BUILD_LOG_FILE}
    echo "##### Finished compiling."

    echo "NOTE #1: Before installing your shiny new gcc run the gcc-testsuite to check your build is OK!"

    echo "NOTE #2: Don't forget to generate symlinks in system's bin directory!"
    echo "EXAMPLE: sudo ln -sf ${PREFIX}/bin/${PKG_NAME}-${PKG_VER} /usr/bin/${PKG_NAME}-${PKG_VER}"

    echo "NOTE #3: Don't forget to add ${PREFIX}/lib' to /etc/ld.so.conf.d/${TARGET_SYSTEM_TYPE}.conf!"
    echo "EXAMPLE: sudo ldconfig -v"



    参考资料:

    http://stackoverflow.com/questions/4262531/trouble-building-gcc-4-6

    http://gcc.gnu.org/wiki/InstallingGCC

    http://askubuntu.com/questions/69365/cant-build-gcc-anymore-since-upgrade-to-11-10

    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=644986

  • 相关阅读:
    ELK 收集 K8S (containerd 容器运行时) 二
    EFK 收集 Docker 日志
    ELK 收集 Docker 日志
    ELK 收集 K8S (containerd 容器运行时) 三
    Java 基础(Stream APl)
    Java 基础(方法引用 Method References)
    Java 基础(Lambda表达式 和 函数式 Functional 接口)
    Java 基础(Stream APl) 二
    ELK 收集 K8S (containerd 容器运行时) 一
    部署 Harbor 2.4.1
  • 原文地址:https://www.cnblogs.com/li_shugan/p/2337422.html
Copyright © 2011-2022 走看看