Apollo-3.0本地编译

Posted longjiang-uestc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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进行查看是否有对应的库, 有时候库的版本太多也不行, 需要卸载到不需要的版本。

以上是关于Apollo-3.0本地编译的主要内容,如果未能解决你的问题,请参考以下文章

是否可以动态编译和执行 C# 代码片段?

Notepad++编辑器——Verilog代码片段直接编译

根据图片的url地址下载图片到本地保存代码片段

导致资产预编译在heroku部署上失败的代码片段

如何有条件地将 C 代码片段编译到我的 Perl 模块?

Vue在线编译器