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 &#34;out/hello.pb.h&#34;
using namespace std;
using namespace hello;
int main()
{
Hello a;
a.set_id(101);
a.set_name(&#34;kiqin&#34;);
a.set_email(&#34;769232001@qq.com&#34;);
string tmp;
bool ret = a.SerializeToString(&tmp);
if (ret)
{
printf(&#34;encode success!\n&#34;);
}
else
{
printf(&#34;encode faild!\n&#34;);
}
Hello b;
ret = b.ParseFromString(tmp);
if (ret)
{
printf(&#34;decode success!\n id= %d \n name = %s\n email = %s\n&#34;,
b.id(), b.name().c_str(), b.email().c_str());
}
else
{
printf(&#34;decode faild!\n&#34;);
}
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]