基于Yocto交叉编译gRPC的步骤简介

本文介绍了如何基于Yocto环境进行gRPC(v1.21.0)和Protobuf(v3.5.0)的交叉编译,详细阐述了从初始化环境到安装的每一步骤,包括遇到的问题如依赖头文件版本冲突及Makefile的修改等,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版本适配:gRPC=v1.21.0, Protobuf=v3.5.0

交叉编译之前,请先编译安装本地版本的gRPC和Protobuf,注意版本适配。

第一步:初始化Yocto的交叉编译环境

source Yocto 的环境变量 environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi

第二步:编译安装Protobuf

cd third_party/protobuf/
git submodule update --init --recursive #修改本地源方法如前文,更新第三方源码
./autogen.sh
./configure --prefix=/usr --host=arm-poky-linux-gnueabi --with-protoc=/usr/local/bin/protoc
make -j2
make DESTDIR=~/rootfs install

注意:其中DESTDIR指定交叉编译环境的安装目录,而不是本地系统环境。

第三步:配置gRPC的环境变量

注意:先修改Makefile文件,后面还需要再修改一次
prefix ?= /usr

export GRPC_CROSS_COMPILE=true
export LDXX=$CXX
export LD=$CXX
export PROTOBUF_CONFIG_OPTS="--host=arm-poky-linux-gnueabi --with-protoc=/usr/local/bin/protoc"
export GRPC_CROSS_LDOPTS=$LDFLAGS
export GRPC_CROSS_AROPTS=rc
export USE_BUILT_PROTOC=true

第四步:执行make命令并解决一些问题

问题1:src/compiler/ruby_generator.cc和src/cpp/server/channelz/channelz_service.cc依赖了Protobuf 3.6.0的头文件

解决1:替换源文件为旧版本,内容较多放在文章最后面。

问题2:

[GRPC]    Generating gRPC's protobuf service CC file from src/proto/grpc/channelz/channelz.proto
/home/help/RPC/grpc/bins/opt/grpc_cpp_plugin: program not found or is not executable
--grpc_out: protoc-gen-grpc: Plugin failed with status code 1.
Makefile:2590: recipe for target '/home/help/RPC/grpc/gens/src/proto/grpc/channelz/channelz.grpc.pb.cc' failed
make: *** [/home/help/RPC/grpc/gens/src/proto/grpc/channelz/channelz.grpc.pb.cc] Error 1

解决2:修改Makefile文件,找到变量PROTOC_PLUGINS_DIR ,覆盖所有变量赋值:PROTOC_PLUGINS_DIR = /usr/local/bin

问题3:如何交叉编译的安装?

解决3:修改Makefile文件,设置变量为: prefix ?= ~/rootfs

第五步:执行make install安装

以上,已经安装完成。

附件:

src/compiler/ruby_generator.cc

/*
 *
 * Copyright 2015 gRPC authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

#include <cctype>
#include <map>
#include <vector>

#include "src/compiler/config.h"
#include "src/compiler/ruby_generator.h"
#include "src/compiler/ruby_generator_helpers-inl.h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值