我有一个 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,... external symbols do不存在。我能够找到在 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
文件以提供函数定义。
关于没有<iostream>的c++ nanopb Protobuff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52729061/