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 ...
随机推荐
- Django基于正则表达式匹配URL
在Django1.X中,是这样匹配的. 在Django2.X中,是这样匹配的. Django2.X中开始需要用re_path模块进行正则表达式匹配了,太JB坑了,卡了好久这个问题,最后还是问群里面的高 ...
- Redis之路
前言:数据库是一切数据的源头,因此我们没有逃避的理由 (一) 什么是redis? redis是nosql(not noly sql)产品中最为出色的一种非关系型的数据库,主要包括以下几种存储结构:St ...
- Ubuntu 下使用 putty并通过 ch340 usb 串口线进行调试
安装putty sudo apt-get install putty -y 插入usb转串口线 由于linux下没有Windos类似的设备管理器,所以我们可以通过其他方法获取对应的串口号 可以在插拔之 ...
- springboot打包成war,部署到tomcat无法访问的问题
如题:实在是太坑.平时本地测试觉得很方便,但是到了项目打包发布掉链子了. 如很多帖子一样: 首先springboot内嵌的tomcat,再依赖servlet-api,修改启动类继承SpringBoot ...
- web.xml之<context-param>与<init-param>的区别与作用【转】
引用自-->http://www.cnblogs.com/hzj-/articles/1689836.html <context-param>的作用:web.xml的配置中<c ...
- Golang入门教程(十五)指针
什么是指针? 指针是一个变量,用于存储另一个变量的内存地址. 在上面的例子中,变量b的值是156,存储在内存地址0x1040a124. 变量a包含b的地址. 可以说现在a指向b. 声明指针 指向类型 ...
- API(Scanner、Random、ArrayList、String、Arrays、Math)
Scanner import java.util.Scanner; /* public int nextInt(): to get a integer from keyboard public Str ...
- Jrebel for Android 安装使用
1.打开File-Setting-plugin-browse repositories.然后点击Manger repositories添加我们的私人存储库 http://dl.zeroturnarou ...
- Docker摘要
Docker https://www.docker.com/ 消除应用的依赖矩阵. 消除硬件依赖 和 软件依赖. Escape the app dependency matrix Eliminate ...
- 随机生成10元素数组并找出最大元素(Java)
package day01; import java.util.Arrays; import java.util.Random; public class MaxOfArray { public st ...