当前位置: 首页 > 工具软件 > nanopb > 使用案例 >

nanopb 问题总结

阎麒
2023-12-01

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

 类似资料: