【问题标题】:Protobuf dynamic and static libraryProtobuf 动态和静态库
【发布时间】:2018-12-31 01:33:02
【问题描述】:

我有两个自定义的 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 应用程序,并将动态 proto 库链接到该应用程序。

问题是当我设置 name_1、name_2 或 name_3 之一时,它们都有这个值。我认为所有这些字符串都有相同的缓冲区。 如果将动态库转换为静态库,那么问题就消失了。 谁能解释一下它有什么问题?谢谢你。

【问题讨论】:

    标签: c++ protocol-buffers


    【解决方案1】:

    如果未设置字段,则应返回空字符串。请查看文档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。如果还不够,您可以通过手动内存管理来优化您的代码。

    【讨论】:

      猜你喜欢
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 2018-01-23
      • 2015-03-06
      相关资源
      最近更新 更多