Protobuf动态和静态库

时间:2018-12-26 15:44:43

标签: c++ protocol-buffers

我有两个自定义的protobuf库。一种是动态的,另一种是静态的。 静态库有一条消息:

message DataType
{
    int number = 1;
    string name_1 = 2;
    string name_2 = 3;
    string name_3 = 4;
}

// The dynamic lib has a message:
message MyMessage
{
    DataType type = 1;
}

我通过将静态原型库链接到它来构建动态原型库。 然后,我建立了将动态原型库链接到的exe应用程序。

问题是当我设置name_1,name_2或name_3之一时,它们都具有此值。我认为所有这些字符串都具有相同的缓冲区。 如果将动态库转换为静态库,则问题消失。 谁能解释我这是怎么回事?谢谢。

1 个答案:

答案 0 :(得分:0)

如果未设置字段,则应返回空字符串。请检查文档here

如果您使用的是版本2,则可以查询该字段是否由has_name_x()设置。

顺便说一下,有几种方法可以设置值:

  • 最简单的方法创建一个副本:void set_name_x(const string& value)
  • 对于C++11,您可以移动字符串值:void set_name_x(string&& value)
  • 您可以传递指针:void set_allocated_name_x(string* value)
  • 您可以获得指向存储的字符串的指针:string* mutable_name_x()

我建议您熟悉protobuf,并让它管理内存并使用set_name_x。如果这还不够,您可以通过手动内存管理来优化代码。