这个东西听说很牛皮,15年就开始研发了,但我今天才接触到,感受到大厂的预见跟资源,因为要移植到arm板上,所以要进行交叉编译,也是遇到了一些坑,记录一下以免以后忘记

1.下载源码

https://github.com/ApolloAuto/apollo-DuerOS/tree/master/CarLife-Vehicle-Lib

CarLife-Vehicle-Lib这个目录下是linux版的车机端源码

2.进入目录,解压protobuf-2.5.0.tar.gz

3.cd protobuf-2.5.0/

4.直接编译

./configure(默认安装路径/usr/local/include lib)
make
make check
sudo make install

5.交叉编译

./configure --build=x86_64-unknown-linux-gnu --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ --with-protoc=protoc --prefix=/usr/protobuf --disable-shared
make
make check(有错,不用理)
sudo make install

–build=x86_64-unknown-linux-gnu 编译的机器
–host=arm-linux-gnueabihf 运行机器
CC=arm-linux-gnueabihf-gcc c编译工具链
CXX=arm-linux-gnueabihf-g++ c++编译工具链
–prefix=/usr/protobuf 安装路径

如果有报错找不到protoc的话,需要安装

sudo apt-get install protobuf-compiler

6.编译carlife源码

6.1 在makefile中加入工具链

#Author:
#   Liu CaiQuan
#Date:
#   7th Semptember 2015
#CarLife Protocol version:
#   V0.15
#
#rule for Linux
#
#                   Copyright (C) Under BaiDu, Inc.#TOPDIR:=~/EddyWorkSpace/CarLifeLibSourceCode/trunkTOPDIR:=$(shell pwd)
export TOPDIR#CROSS_COMPILE=
CROSS_COMPILE ?=arm-linux-gnueabihf-
LD=$(CROSS_COMPILE)ld
CC=$(CROSS_COMPILE)g++CP=cpexport LD CC #COM_FLAGS = -Wall -O2 -fPIC -mcpu=cortex-a9 -mfpu=neon-fp16 -mfloat-abi=hard -mthumb-interwork -marm
#CFLAGS    = $(COM_FLAGS) -std=c++14#CFLAGS = -g
CFLAGS:=-g -Wall -O2 -fPIC -mcpu=cortex-a9 -mfpu=neon-fp16 -mfloat-abi=hard -mthumb-interwork -marm -std=c++11
CFLAGS+=-I protobuf/cc/include
CFLAGS+=-I $(TOPDIR)/include
CFLAGS+=-I $(TOPDIR)/protobuf/cc/include
#CFLAGS+=-I /usr/local/include
#CFLAGS+=-I /usr/local/include/google/protobuf
#CFLAGS+=-I /usr/local/include/google/protobuf/io
#CFLAGS+=-I /usr/local/include/google/protobuf/stubs
CFLAGS+=-I /usr/protobuf/include
CFLAGS+=-I /usr/protobuf/include/google/protobuf
CFLAGS+=-I /usr/protobuf/include/google/protobuf/io
CFLAGS+=-I /usr/protobuf/include/google/protobuf/stubs#CFLAGS+=-I /usr/include //跟本地的头文件有冲突,需要去掉
CFLAGS+=-I /usr/include/libxml2#LFLAGS:=-fPIC -shared
#LFLAGS+=-L/usr/local/lib -lprotobuf
LFLAGS+=-L/usr/protobuf/lib -lprotobuf#LFLAGS+=-L/usr/protobuf/lib -L/usr/protobuf/lib/libprotobuf.aexport CFLAGS LFLAGSOBJDIR=obj#obj-y+=CarLifeLibTest.o
obj-y+=core/
obj-y+=libwrapper/
obj-y+=modules/
obj-y+=protobuf/
obj-y+=utility/TARGET-LIB=libcarlifevehicle.so
TARGET-APP=libtestall: carlifelib libtestcarlifelib: make -C ./ -f $(TOPDIR)/Makefile.build$(CC) -shared -o $(TARGET-LIB) built-in.o$(CP) $(TARGET-LIB) $(OBJDIR)  libtest:CarLifeLibTest.cpp$(CC) -o $(TARGET-APP) $< -Iinclude -L./ -lcarlifevehicle -lpthread $(LFLAGS)$(CP) $(TARGET-APP) $(OBJDIR)protoBuf:rm -f ./protobuf/pbGen/*protoc --proto_path=./protobuf/proto/ --cpp_out=./protobuf/pbGen ./protobuf/proto/*.protorm -f ./protobuf/cc/src/*.ccrm -f ./protobuf/cc/include/*.hmv ./protobuf/pbGen/*.cc ./protobuf/cc/src/mv ./protobuf/pbGen/*.h ./protobuf/cc/include/clean:rm -f $(shell find -name "*.o")rm -f $(TARGET-LIB)rm -f $(TARGET-APP)rm -f $(OBJDIR)/*distclean:rm -f $(shell find -name "*.o")rm -f $(shell find -name "*.d")rm -f $(TARGET-LIB)rm -f $(TARGET-APP)rm -f $(OBJDIR)/*

7.将libtest ,obj,libcarlifevehicle.so复制到板子上

8.搭建arm运行环境

8.1将protobuf库移植到arm板上,将/usr/protobuf/lib/* 拷贝到存有libtest文件的路径下,也可以将其拷贝到/usr/lib下,放入环境变量

carlife交叉编译相关推荐

  1. android carlife 源码,CarLife开发总结

    CarLife开发总结 百度CarLife是百度推出的车联网解决方案之一,目前分为前装集成与后装安装两种方式提供 准备资料 前装项目申请:http://carlife.baidu.com/carlif ...

  2. 车联网Apollo(阿波罗),研究carlife车机端集成及开发,(WeLink,carplay/carlife)

    Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景 - ...

  3. CarLife开发总结

    CarLife开发总结 百度CarLife是百度推出的车联网解决方案之一,目前分为前装集成与后装安装两种方式提供 准备资料 前装项目申请:http://carlife.baidu.com/carlif ...

  4. 百度CarLife开发备忘

    1.建立aoa通道 可以通过libusb直接打开手机端的aoa模式,发送百度CarLife描述信息.此后会重新枚举aoa设备,手机端会提示是否需要下载carlife. 也可以通过内核来建立一个aoa驱 ...

  5. Golang的交叉编译问题

    参考:Golang交叉编译各个平台的二进制文件 - Go语言中文网 - Golang中文社区 (studygolang.com).也谈Go的可移植性 | Tony Bai 今天准备将一个在Mac上开发 ...

  6. Linux 交叉编译简介

    Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...

  7. TVM交叉编译和远程RPC

    TVM交叉编译和远程RPC 本文介绍了TVM中使用RPC的交叉编译和远程设备执行. 使用交叉编译和RPC,可以在本地计算机上编译程序,然后在远程设备上运行它.当远程设备资源受到限制时(如Raspber ...

  8. 用TensorRT针对AArch64用户的交叉编译示例

    用TensorRT针对AArch64用户的交叉编译示例 以下介绍如何在x86_64linux下为AArch64 QNX和Linux平台交叉编译TensorRT示例. 2.1. Prerequisite ...

  9. Go 学习笔记(37)— 标准命令(go build 跨平台编译、交叉编译、go clean、go run、go fmt、go install、go get)

    1. 标准命令简述 Go 本身包含来大量用于处理 Go 程序的命令和工具. 命令 作用 build 用于编译指定的代码包或 Go 语言源码文件.命令源码文件会被编译成可执行文件,并存放到命令执行的目录 ...

最新文章

  1. linux 内核 虚拟文件系统VFS 路径查找 path_lookup
  2. leetcode 233 number of digit one
  3. 【数学建模】聚类分析(评价与决策)
  4. java中 a_java中 a++ 和 ++a
  5. Python Numpy 笔记
  6. timespan怎么比较大小_钻石吊坠回收怎么选择大小?
  7. linux生成的pdf文件,把LINUX MAN PAGE生成为PDF文件的脚本
  8. eclipse安装WindowBuilder Pro组件
  9. 用 Zabbix 监控值统计每个月触发器告警次数
  10. [原创]在ObjectDataSource中使用自定义Web控件提供查询参数
  11. mysql 的各种 join
  12. cloudflare_CloudFlare泄漏的消息揭晓,密码管理变得轻松
  13. 获取TrustedInstaller权限
  14. 自己搭建无线音乐服务器,建立自己的音乐库 Aurender ACS10 音乐服务器
  15. PG系列6-PostgreSQL的体系架构
  16. Kanzi学习之路(4):Kanzi的属性系统
  17. 微信小程序开发需要的相关技术
  18. 用命令提示符运行java_怎么用命令提示符运行java程序?
  19. 手机如何借用笔记本网络上网
  20. 网络舆论舆情监测怎么做的系统技术解决办法

热门文章

  1. 《代码大全2》第17章 不常见的控制结构
  2. echarts实现象形图记录一下
  3. layui添加复选框_layui表格数据复选框回显设置方法
  4. “数据星河”系列沙龙——走进ABC科创企业•哈勃智远活动成功举办
  5. 程序员大神,C++编程制作不一样的五子棋小游戏
  6. java 黑皇后_2n皇后问题
  7. D. Backspace
  8. 商用平板市场第一品牌联想助力高质量个性化教学落地
  9. 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-5.用户登录,密码的bcrypt(hash)加密与验证
  10. 网站停服、秒杀大促…解析高可用网站架构云化