nanopb 问题总结

1. Introduction

遇到的问题:Could not import the Google protobuf Python libraries
解决办法[1]:

pip install --ignore-installed six
sudo pip install protobuf

2. examples

2.1 使用protoc工具生成头文件和源文件

  • 使用cmake 直接生成相应的头文件
    需要安装nanopb
cmake_minimum_required(VERSION 2.8)
project(NANOPB_CMAKE_SIMPLE C)

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../extra)
find_package(Nanopb REQUIRED)
include_directories(${NANOPB_INCLUDE_DIRS})

nanopb_generate_cpp(PROTO_SRCS PROTO_HDRS simple.proto)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
set_source_files_properties(${PROTO_SRCS} ${PROTO_HDRS}
    PROPERTIES GENERATED TRUE)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -g -O0")

add_executable(simple simple.c ${PROTO_SRCS} ${PROTO_HDRS})
  • 使用python脚本
    不需要安装nanopb
    先用protoc生成.pb,然后再用nanopb_generator.py 生成.pb.c和.pb.h文件[2]
$ protoc -o message.pb message.proto
$ python nanopb/generator/nanopb_generator.py message.pb

2.2 定义数组

myMessage.proto定义成下面形式:

syntax = "proto3";
message myMessage {
  repeated float myArray = 1
  repeated float myVector = 2;
}

定义一个myMessage.options

#myMessage
myMessage.myArray    max_count:10      fixed_count:true
myMessage.myVector    max_count:10     

生成的myMessage.pb.h文件

typedef struct _myMessage {
	float myArray[10];
    pb_size_t myVector_count;
    float myVector[10];
} myMessage;

References

[1] https://stackoverflow.com/questions/46478988/unable-to-import-google-protobuf-python-module
[2] https://blog.csdn.net/shangsongwww/article/details/101066274

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值