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中的动态库拷贝到对应位置。
- 以下是几个常见的问题:
- Bazel的安装版本太新, bazel官方安装教程, apollo编译用的是bazel-0.5.3,如果版本太新的话需要卸载后重新安装0.5.3版本。
- 一些计算库找不到头文件, 直接从docker里面拷贝即可,也可以先查清楚是那个计算库, 再安装即可。
3.OpenGL库及其相关库没有安装, 需要安装glfw和glut等, glfw安装教程,sudo apt-get install freeglut3-dev来安装glut。 - 没有显卡或是没有GPU也需要安装cudnn的库, 主要是在NVIDIA官方注册下载库(其实就是动态链接库和静态链接库的集合), 然后拷贝到放库的目录, 一般为
/usr/local/lib中。 - 如果提示没有动态链接库, 可以通过
sudo ld -l库名称 --verbose进行查看是否有对应的库, 有时候库的版本太多也不行, 需要卸载到不需要的版本。
Apollo-3.0本地编译的更多相关文章
- 【转】用串口登录Beaglebone Black、用usb共享电脑网络、内核模块的本地编译
原文网址:http://bbs.eeworld.com.cn/thread-431507-1-1.html 串口连接BBB使用usb线可以连接BBB和电脑,用ssh就可以登录BBB来进行操作.但有时候 ...
- oracle本地编译问题
oracle10.2: --将过程重新编译为本地编译方式,提示有编译错误,经查提示未设置plsql_native_library_dir 参数 SQL> alter procedure p_xx ...
- Saiku二次开发获取源代码在本地编译(五)
关于Saiku的二次开发,在本地编译然后启动自己编译好的Saiku服务 Saiku是开源的,从github上能下载源代码,本例中的saiku源码也是从github上找的,然后自己改了一些pom.xml ...
- 本地编译全志R系列的步骤7(Ubuntu 17.04非长期支持版本)
本地编译全志R系列的步骤7(Ubuntu 17.04非长期支持版本) 2017/6/29 13:49 0.获取全志R系列的Android源码包: 请通过渠道/代理商/方案公司获取全志R系列的Andro ...
- 本地编译全志R系列的步骤(Ubuntu16.04.4版本)
本地编译全志R系列的步骤(Ubuntu16.04.4版本) 2018/6/14 9:32 版本:V1.0 0.获取全志R系列的Android源码包: 请通过渠道/代理商/方案公司获取全志R系列的And ...
- UNICODE本地编译freescale的i.MX6Q的android4.2.2&android4.4.2 && 全志a80的步骤x1
20151031本地编译freescale的i.MX6Q的android4.2.2&android4.4.2 && 全志a80的步骤x1 2015/10/31 15:07 开始 ...
- maven项目引入外部第三方jar包,引入、本地编译、第三方jar一起打到jar中、在linux机器中解决classnotfound(配置classpath),笔记整理。
文章目录 引用的第三方jar的目录结构(示例) 引入第三方jar进行dependency使项目内能import 本地编译 第三方jar一起打到jar中 在linux机器中解决classnotfound ...
- day111:MoFang:邀请好友流程&生成邀请好友二维码&第三方应用识别二维码&本地编译测试&记录邀请人信息
目录 1.邀请业务逻辑流程图 2.邀请好友-前端 3.邀请好友-后端接口(生成二维码) 4.前端获取后端生成的二维码 5.前端长按页面,保存图片到相册 6.客户端通过第三方识别微信二维码,服务端提供对 ...
- hadoop-2.2.0 的编译安装及HA配置
一 准备工作 准备工作中要求有 1.centOs 6.4,添加hadoop用户,配置集群内的/etc/hosts文件. 2.安装hadoop用户的ssh,并打通集群内所有机器,(ha执行fencing ...
随机推荐
- centos 6.5 ruby环境安装
redis3.0以上支持集群,自带集群管理工具redis-trib.rb:在搭建集群前,安装ruby环境 ruby安装包下载 安装开发工具 1.命令:yum groupinstall "De ...
- IDEA之debug的坑
IDEA是一款火热的开发工具.debug谁都会,很简单?NO 一次不正常的关机,导致第二条上班debug失效,浪费两个小时.特做此记录. 1.如下图点击View Breakpoints进入可以到你设置 ...
- excel vlookup简易样例【原】
vlookup功能 vlookup主要用来做映射,就像java的map一样. 比如我要找id为2的学生对应的名字,那么在F7单元格录入=VLOOKUP(E7,$A$2:$B$4,2,FALSE) 实际 ...
- hdu 2815 Mod Tree (exBSGS)
http://acm.hdu.edu.cn/showproblem.php?pid=2815 //解 K^D ≡ N mod P #include<map> #include<cma ...
- python之所以强大很大一部分原因在于他众多的取之不尽的库
GUI 的 自动任务用这个pyautogui库,web 页面的用 selenium + webdriver 同类型的还有 sikuli ,低配版 按键精灵 本教程译自大神Al Sweigart的PyA ...
- 在CentOS7上安装Zabbix3.0
#!/bin/bash # # .配置无人值守的安装,定义安装过程中需要用到的一些信息 # mysql_root_pw=root_pw mysql_zabbix_pw=zabbix_pw DBPass ...
- 使用select的str_cli函数的实现
void str_cli(FILE *fp, int sockfd) { int maxfdp1; fd_set rset; char sendline[MAXLINE], recvline[MAXL ...
- ****** 三十 ******、软设笔记【计算机体系结构】-循环冗余校验码(CRC)
循环冗余校验码(CRC) 广泛地在网络通信及磁盘存储时采用. 1.多项式 在循环冗余校验(CRC)码中,无一例外地要提到多项式的概念.一个二进制数可以以一个多项式来表示.如1011表示为多项式X ...
- 向JSP中静态导入HTML文件时,运行jsp时,html中中文产生乱码问题最简单的解决方法
在保证其他的编码格式一致的情况下 在html标签内,head标签外添加一下代码时可以完美解决 亲测 <%@page pageEncoding="UTF-8"%>
- STLINK V2安装使用详解
1. 解压st-link_v2_usb driver.zip文件. 2. 运行解压后的st-link_v2_usbdriver.exe文件,安装STLINK V2驱动程序.安装路 ...