没有<iostream>的c++ nanopb Protobuff

标签 c++ serialization protocol-buffers nanopb

我有一个 protoBuff3 规范,看起来像

message MSG {
   string name = 1;
   repeated string data = 2;
}

还有一个设置“MSG.data max_count:20”的选项文件

我正在尝试不使用 .

我目前正在使用 pb_ostream_from_bufferpb_encode 但是我在尝试链接时收到错误提示 pb_ostream_..., pb_encode, pb_decode,... external symbols do不存在。我能够找到在 pb_encode.h 和 pb_decode.h 中定义的这些函数

.在网上我看到了对函数的引用,比如 ParseFromStringSerializeToString,但是我在任何地方都找不到这些函数。

在没有 iostream 的情况下序列化和序列化我的消息的正确方法是什么?

最佳答案

protobuf库有很多,相互独立。通常你会选择一个并使用它:

这些都可以用于序列化和解析来自内存缓冲区的消息。此外,Google 的库支持 C++ iostream,而 nanopb 支持用 C 实现的类似流系统。

有关“外部符号不存在”的错误表明您没有链接 nanopb 库代码(pb_encode.cpb_decode.c pb_common.c).和往常一样,.h 文件只包含函数声明,而您需要链接.c 文件以提供函数定义

关于没有<iostream>的c++ nanopb Protobuff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52729061/

相关文章:

java - 持久化的序列化缺点

java - XML 反序列化 java XSTream 问题

c++ - Google语音识别(cpp示例):对AssignDescriptors()的 undefined reference

c++ - 如何使用特定的 unicode 代码点 rtrim wchar_t?

c++ - 如何清除c中的内存

java - 为什么java中的serialVersionUID必须是static、final、long类型?

protocol-buffers - 我们如何将变体消息(几种消息类型之一)放入 protobuf 消息中?

javascript - CEF 中从客户端到浏览器的消息传递序列化

c++ - C++中的重复静态变量初始化

c++ - 模板多态可以代替OO多态吗?