一、protobuf的下载安装
1、解压压缩包:unzip protobuf-master.zip
2、进入解压后的文件夹:cd protobuf-master
3、安装所需工具:sudo apt-get install autoconf automake libtool curl make g++ unzip
4、自动生成configure配置文件:./autogen.sh
5、配置环境:./configure
6、编译源代码(时间比较长):make
7、安装:sudo make install
8、刷新动态库:sudo ldconfig
二、protobuf文件test.proto的实现
syntax="proto3";//version
package fixbug; //namespace
message ResultCode
{
int32 errcode=1;
bytes errmsg=2;
}
//request message type
message LoginRequest
{
bytes name=1;
bytes pwd=2;
}
//response message type
message LoginResponse
{
int32 errcode=1;
string errmsg=2;
bool sucess=3;
}
message GetFriendListRequest
{
uint32 userid=1;
}
message user
{
bytes name=1; //string
uint32 age=2;
enum Sex{
MAN=0;
WOMAN=1;
}
Sex sex=3; //3 members
}
//list message
message GetFriendListResponse
{
ResultCode result=1;
repeated user friendlist=2; //list type
}
三、编译test.proto文件
protoc test.proto --cpp_out=./
生成test.pb.cc test.pb.h文件
四、编写主函数
#include "test.pb.h"
using namespace std;
using namespace fixbug;
int main()
{
/*LoginResponse rsp; //当一个message中包含另一个message时,例如LoginResponse 包含
//了ResultCode,那么将ResultCode指针接收rsp.mutable_result()
ResultCode*rc=rsp.mutable_result();
rc->set_error_code(1);
rc->set_error_message("error");
*/
GetFriendListResponse rsp;
ResultCode*rc=rsp.mutable_result();
rc->set_errcode(1);
user* user1=rsp.add_friendlist();//add list member
user1->set_name("zhansan");
user1->set_age(20);
user1->set_sex(user::MAN);
std::cout<<rsp.friendlist_size()<<std::endl;
}
/*
int main()
{
LoginRequest req;
req.set_name("zhansan");
req.set_pwd("123456");
string send_str;
if(req.SerializeToString(&send_str)==true) //序列化,将req的内容全部序列化为字符串
{
std::cout<<send_str<<std::endl;
}
LoginRequest reqs;
if(reqs.ParseFromString(send_str)) //反序列化,将字符串内容反序列到reqs中
{
cout<<reqs.name()<<std::endl;
cout<<reqs.pwd()<<std::endl;
}
return 0;
}
*/
五、编译成可执行文件a.out
g++ main.cc test.pb.cc -lprotobuf