我有一个protoBuff3规范,看起来像
message MSG {
string name = 1;
repeated string data = 2;
}
还有一个设置“ MSG.data max_count:20”的选项文件
我正在尝试不使用来编码和解码原型。
我目前正在使用pb_ostream_from_buffer和pb_encode,但是尝试链接时出现错误,提示pb_ostream _...,pb_encode,pb_decode,...外部符号不存在。我能够找到在pb_encode.h和pb_decode.h中定义的这些函数
。网上我看到对像
ParseFromString和SerializeToString,但是我在任何地方都找不到这些函数。
在没有iostream的情况下序列化和序列化消息的正确方法是什么?
最佳答案
有许多彼此分离的protobuf库。通常,您会选择一个并使用:
nanopb:具有诸如pb_ostream_from_buffer
和pb_encode
的功能。
Google's protobuf C++ library:具有诸如ParseFromString
和SerializeToString
的功能。
这些中的任何一个都可以用于序列化和解析来自内存缓冲区的消息。此外,Google的库支持C ++ iostream,而nanopb支持用C实现的类似流系统。
关于“外部符号不存在”的错误表明您未针对nanopb库代码(pb_encode.c
,pb_decode.c
和pb_common.c
)进行链接。通常,.h
文件仅包含函数声明,而您需要链接到.c
文件以提供函数定义。