carlife交叉编译
这个东西听说很牛皮,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交叉编译相关推荐
- android carlife 源码,CarLife开发总结
CarLife开发总结 百度CarLife是百度推出的车联网解决方案之一,目前分为前装集成与后装安装两种方式提供 准备资料 前装项目申请:http://carlife.baidu.com/carlif ...
- 车联网Apollo(阿波罗),研究carlife车机端集成及开发,(WeLink,carplay/carlife)
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景 - ...
- CarLife开发总结
CarLife开发总结 百度CarLife是百度推出的车联网解决方案之一,目前分为前装集成与后装安装两种方式提供 准备资料 前装项目申请:http://carlife.baidu.com/carlif ...
- 百度CarLife开发备忘
1.建立aoa通道 可以通过libusb直接打开手机端的aoa模式,发送百度CarLife描述信息.此后会重新枚举aoa设备,手机端会提示是否需要下载carlife. 也可以通过内核来建立一个aoa驱 ...
- Golang的交叉编译问题
参考:Golang交叉编译各个平台的二进制文件 - Go语言中文网 - Golang中文社区 (studygolang.com).也谈Go的可移植性 | Tony Bai 今天准备将一个在Mac上开发 ...
- Linux 交叉编译简介
Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...
- TVM交叉编译和远程RPC
TVM交叉编译和远程RPC 本文介绍了TVM中使用RPC的交叉编译和远程设备执行. 使用交叉编译和RPC,可以在本地计算机上编译程序,然后在远程设备上运行它.当远程设备资源受到限制时(如Raspber ...
- 用TensorRT针对AArch64用户的交叉编译示例
用TensorRT针对AArch64用户的交叉编译示例 以下介绍如何在x86_64linux下为AArch64 QNX和Linux平台交叉编译TensorRT示例. 2.1. Prerequisite ...
- Go 学习笔记(37)— 标准命令(go build 跨平台编译、交叉编译、go clean、go run、go fmt、go install、go get)
1. 标准命令简述 Go 本身包含来大量用于处理 Go 程序的命令和工具. 命令 作用 build 用于编译指定的代码包或 Go 语言源码文件.命令源码文件会被编译成可执行文件,并存放到命令执行的目录 ...
最新文章
- linux 内核 虚拟文件系统VFS 路径查找 path_lookup
- leetcode 233 number of digit one
- 【数学建模】聚类分析(评价与决策)
- java中 a_java中 a++ 和 ++a
- Python Numpy 笔记
- timespan怎么比较大小_钻石吊坠回收怎么选择大小?
- linux生成的pdf文件,把LINUX MAN PAGE生成为PDF文件的脚本
- eclipse安装WindowBuilder Pro组件
- 用 Zabbix 监控值统计每个月触发器告警次数
- [原创]在ObjectDataSource中使用自定义Web控件提供查询参数
- mysql 的各种 join
- cloudflare_CloudFlare泄漏的消息揭晓,密码管理变得轻松
- 获取TrustedInstaller权限
- 自己搭建无线音乐服务器,建立自己的音乐库 Aurender ACS10 音乐服务器
- PG系列6-PostgreSQL的体系架构
- Kanzi学习之路(4):Kanzi的属性系统
- 微信小程序开发需要的相关技术
- 用命令提示符运行java_怎么用命令提示符运行java程序?
- 手机如何借用笔记本网络上网
- 网络舆论舆情监测怎么做的系统技术解决办法
热门文章
- 《代码大全2》第17章 不常见的控制结构
- echarts实现象形图记录一下
- layui添加复选框_layui表格数据复选框回显设置方法
- “数据星河”系列沙龙——走进ABC科创企业•哈勃智远活动成功举办
- 程序员大神,C++编程制作不一样的五子棋小游戏
- java 黑皇后_2n皇后问题
- D. Backspace
- 商用平板市场第一品牌联想助力高质量个性化教学落地
- 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-5.用户登录,密码的bcrypt(hash)加密与验证
- 网站停服、秒杀大促…解析高可用网站架构云化