protobuf 安装与使用

来源:互联网 发布:淘宝店类目可以改吗 编辑:程序博客网 时间:2024/05/16 08:39

安装

安装依赖

autoconf

sudo apt-get install autoconf

libtool

 sudo apt-get install libtool

准备源码

  • 下载源码 protobuf 2.6.1
  • 解压 unzip protobuf-2.6.1.zip
  • 下载gtest googletest-release-1.5.0.zip
  • unzip googletest-release-1.5.0.zip ; mv googletest-release-1.5.0 protobuf-2.6.1/gtest

安装

$ ./autogen.sh
$ ./configure
$ make
$ make check
$ make install

使用

定义协议

创建person.proto

message Person
{
required string name = 1;
required int32 id = 2;
optional string email = 3;
}

编译协议

$ protoc person.proto --cpp_out=.
$ ls
person.pb.cc person.pb.h person.proto

编码数据

#include "person.pb.h"
#include <fstream>
using std::ofstream;

int main()
{
Person person;
person.set_name("spch2008");
person.set_id(12);
person.set_email("spch2008@foxmail.com");

ofstream fout("pb_info.dat", std::ios::out | std::ios::binary);
person.SerializeToOstream(&fout);

return 0;
}
$ g++ person.pb.cc write.cc -o writer -lprotobuf
$ ./writer

数据解码

#include <iostream>
#include <fstream>
#include "person.pb.h"

using namespace std;

int main()
{
ifstream fin("pb_info.dat", std::ios::in | std::ios::binary);

Person person;
person.ParseFromIstream(&fin);

cout << "name: " << person.name() << endl;
cout << "email: " << person.email() << endl;

return 0;
}
$ g++ person.pb.cc read.cc -o reader -lprotobuf
$ ./reader
name: spch2008
email: spch2008@foxmail.com

疑难

protoc: error while loading shared libraries: libprotoc.so.9: cannot open shared object file: No such file or directory

export LD_LIBRARY_PATH=/usr/local/lib
0 0
原创粉丝点击