• Apollo-3.0本地编译


    Apollo-3.0本地编译

    • 用docker编译所用的dev.x86_64.dockerfile文件(具体位置在apollo/docker/build)中有所有的依赖库或包, 还会执行一些shell脚本, 这些shell脚本主要存放在apollo/docker/build/installers文件中。

    第一步,安装依赖库

    • 其实也就是按着dev.x86_64.dockerfile文件进行执行, 把RUN改为shell执行罢了。
        sudo apt-get update -y && 
        sudo apt-get install -y 
        apt-transport-https 
        bc 
        build-essential 
        cmake 
        cppcheck 
        curl 
        debconf-utils 
        doxygen 
        gdb 
        git 
        google-perftools 
        graphviz 
        lcov 
        libblas-dev 
        libboost-all-dev 
        libcurl4-openssl-dev 
        libfreetype6-dev 
        liblapack-dev 
        libpcap-dev 
        locate 
        lsof 
        nfs-common 
        realpath 
        shellcheck 
        software-properties-common 
        sshfs 
        subversion 
        unzip 
        v4l-utils 
        vim 
        wget 
        zip 
    

    第二步, 安装apollo第三方库

    • 其实就是把apollo/docker/build/installers文件夹下的shell脚本里面的命令执行一遍, 但要注意的是这些shell脚本都会删掉原始包,为了以防安装过程出错可以选择性的不删掉。
    • 值得注意的是bazel编译文件把依赖的库写到了本地目录/home/tmp, 所以需要自己创建这个目录并把一些第三方库的压缩包放到该目录下, 具体可以参看install_bazel_packages.sh目录:
    mkdir -p /home/tmp
    cd /home/tmp
    
    wget -O opencv-2.4.13.2.zip 
        https://github.com/opencv/opencv/archive/2.4.13.2.zip
    wget -O googletest-release-1.8.0.tar.gz 
        https://github.com/google/googletest/archive/release-1.8.0.tar.gz
    wget -O gflags-2.2.0.tar.gz 
        https://github.com/gflags/gflags/archive/v2.2.0.tar.gz
    wget -O glog-0.3.5.tar.gz 
        https://github.com/google/glog/archive/v0.3.5.tar.gz
    wget -O benchmark-1.1.0.tar.gz 
        https://github.com/google/benchmark/archive/v1.1.0.tar.gz
    wget -O eigen-3.2.10.tar.gz 
        https://bitbucket.org/eigen/eigen/get/3.2.10.tar.gz
    wget -O civetweb-1.10.tar.gz 
        https://github.com/civetweb/civetweb/archive/v1.10.tar.gz
    wget -O curlpp-0.8.1.tar.gz 
        https://github.com/jpbarrette/curlpp/archive/v0.8.1.tar.gz
    wget -O yaml-cpp-0.5.3.zip 
        https://github.com/jbeder/yaml-cpp/archive/yaml-cpp-0.5.3.zip
    wget -O qp-oases-3.2.1-1.zip 
        https://github.com/startcode/qp-oases/archive/v3.2.1-1.zip
    wget -O proj.4-4.9.3.zip 
        https://github.com/OSGeo/proj.4/archive/4.9.3.zip
    wget -O tinyxml2-5.0.1.zip 
        https://github.com/leethomason/tinyxml2/archive/5.0.1.zip
    wget -O protobuf-3.3.0.tar.gz 
        https://github.com/google/protobuf/releases/download/v3.3.0/protobuf-cpp-3.3.0.tar.gz
    
    • 执行完这些脚本基本的环境就OK了, 如果出现一些错误, 一般google一下就能解决, 如果实现不能解决的可以参考docker里面apollo的环境, 具体进入命令为:
    bash docker/scripts/dev_start.sh && bash docker/scripts/dev_into.h
    
    • 因为docker环境被映射到了本地目录, 可以把docker里面的一些库文件直接拷贝出来。
    • 依赖库和第三方库的版本最好和apollo中的保持一致, 库或包的版本太新或太旧都可能出现莫名其妙的问题;比如gflag的版本通过sudo apt-get install libgflags-dev安装的话, 就有可能出现gflag命名空间出错的问题。

    第三步, 开始编译

    • 编译其实和在docker中编译没有太大的区别, 直接执行apollo.sh脚本就行, 但是要注意的是, 该脚本会检查是否是在docker环境下, 所以需要将function source_apollo_base()函数中check docker environment的if语句注释掉,具体为:
    function apollo_check_system_config() {
      # check docker environment
      # if [ ${MACHINE_ARCH} == "x86_64" ] && [ ${APOLLO_IN_DOCKER} != "true" ]; then
      #   echo -e "${RED}Must run $0 in dev docker or release docker${NO_COLOR}"
      #   exit 0
      # fi
    
      # check operating system
      OP_SYSTEM=$(uname -s)
      case $OP_SYSTEM in
        "Linux")
          echo "System check passed. Build continue ..."
    
          # check system configuration
          DEFAULT_MEM_SIZE="2.0"
          MEM_SIZE=$(free | grep Mem | awk '{printf("%0.2f", $2 / 1024.0 / 1024.0)}')
          if (( $(echo "$MEM_SIZE < $DEFAULT_MEM_SIZE" | bc -l) )); then
             warning "System memory [${MEM_SIZE}G] is lower than minimum required memory size [2.0G]. Apollo build could fail."
          fi
          ;;
        "Darwin")
          warning "Mac OS is not officially supported in the current version. Build could fail. We recommend using Ubuntu 14.04."
          ;;
        *)
          error "Unsupported system: ${OP_SYSTEM}."
          error "Please use Linux, we recommend Ubuntu 14.04."
          exit 1
          ;;
      esac
    }
    
    • 然后执行./apollo.sh build_cpu就可以愉快的编译了, 但是可能编译的时候会出现各种错误, 特别要关注那些错误提醒, 一般都是包没有安装完全, 将对应包放到对应目录下就可以了。

    第四步, 错误修改

    • 运气好的话应该可以一次编译通过, 如果出现错误也不用慌,先弄清楚为什么出现这个错误(主要依据错误提示), 然后Google解决方案, 实在没有办法的话, 最直接的方案是把docker中的动态库拷贝到对应位置。
    • 以下是几个常见的问题:
      1. Bazel的安装版本太新, bazel官方安装教程, apollo编译用的是bazel-0.5.3,如果版本太新的话需要卸载后重新安装0.5.3版本。
      2. 一些计算库找不到头文件, 直接从docker里面拷贝即可,也可以先查清楚是那个计算库, 再安装即可。
        3.OpenGL库及其相关库没有安装, 需要安装glfw和glut等, glfw安装教程sudo apt-get install freeglut3-dev来安装glut。
      3. 没有显卡或是没有GPU也需要安装cudnn的库, 主要是在NVIDIA官方注册下载库(其实就是动态链接库和静态链接库的集合), 然后拷贝到放库的目录, 一般为/usr/local/lib中。
      4. 如果提示没有动态链接库, 可以通过sudo ld -l库名称 --verbose进行查看是否有对应的库, 有时候库的版本太多也不行, 需要卸载到不需要的版本。
  • 相关阅读:
    mem 预留内存
    关于内核反汇编,同时显示源文件
    读些笔记
    platform设备驱动
    glut 右键子菜单
    获取HINSTANCE
    window窗口样式style
    opengl 直线拾取
    glut弹出式菜单
    读取大恒采集卡c++代码
  • 原文地址:https://www.cnblogs.com/longjiang-uestc/p/10126301.html
Copyright © 2020-2023  润新知