zt3ff3n 发表于 2022-5-6 19:06

protobuf 测试

官网地址:
Language Guide (proto3)|Protocol Buffers|Google Developers
(1) 编写.proto文件
syntax = "proto3";
package hello;
message Hello
{
         int32 id = 1;
         string name = 2;
         string email = 3;
}保存为 hello.proto
(2) 编译.proto文件,生成对应语言的操作文件。
    若需要python的操作文件,可以执行protoc --python_out=./ hello.proto对应生成hello.py的文件。
    若需要c++的操作文件,则执行:protoc hello.proto --cpp_out=./out 对应生成http://hello.pb.cc hellp.pb.h 文件
(3) 编写源文件 hello.cpp
       /*hello.cpp*/
#include <cstdio>
#include <cstring>
#include "out/hello.pb.h"

using namespace std;
using namespace hello;

int main()
{
    Hello a;
    a.set_id(101);
    a.set_name("kiqin");
    a.set_email("769232001@qq.com");
    string tmp;
    bool ret = a.SerializeToString(&tmp);
    if (ret)
    {
      printf("encode success!\n");
    }
    else
    {
      printf("encode faild!\n");
    }
    Hello b;
    ret = b.ParseFromString(tmp);
    if (ret)
    {
      printf("decode success!\n id= %d \n name = %s\n email = %s\n",
      b.id(), b.name().c_str(), b.email().c_str());
    }
    else
    {
      printf("decode faild!\n");
    }
    return 0;
}
(4) 编写Makefile
注意修改protobuf路径为自己安装所在路径
CC = g++
TARGET = hello
CFALGS = -Wall -g -I./out -I/usr/local/protobuf/include
LDFLAGS = -L/usr/local/protobuf/lib
LIBS = -lprotobuf
OBJ = hello.o hello.pb.o

$(TARGET):$(OBJ)
                $(CC) $(CFLAGS) $(LDFLAGS) $(LIBS) -o $@ $^
hello.o:hello.cpp
                $(CC) -c $(CFLAGS) $(LDFLAGS) $(LIBS) -o $@ $<
hello.pb.o:./out/hello.pb.cc
                $(CC) -c $(CFLAGS) $(LDFLAGS) $(LIBS) -o $@ $<
clean:
                rm -fr *.o $(TARGET)
(5) 编译
   执行命令 make,正常情况下会在out文件夹下生产一个main的可执行文件



若未正确安装,则会出现 大量的 undefined reference to `google::protobuf 错误

页: [1]
查看完整版本: protobuf 测试