protobuf 安装 简单实例 linux

1. 下载安装包

官网下载:https://github.com/google/protobuf

https://github.com/google/protobuf/releases

本人安装版本 protobuf-all-3.6.1.tar.gz

2. 安装过程

2.1 解压

tar zxvf protobuf-all-3.6.0.tar.gz

2.2 编译

cd protobuf-3.6.1/
./configure --prefix=/usr/local/protobuf(你的安装路径)
make
make check
make install

2.3 配置protobuf命令,更改环境变量:

vim /etc/profile

在文件的末尾添加如下的两行:

export PATH=$PATH:/usr/local/protobuf/bin/
export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/

更改完成之后,执行如下命令立即执行:

source /etc/profile

这一步是必须的,如果少了这一步,会出现找不到protoc的命令错误。

2.4 配置动态链接库

vim /etc/ld.so.conf

在文件中添加

/usr/local/protobuf/lib(注意: 在新行处添加)

更改完成之后,执行如下命令立即执行:

sudo ldconfig

测试:

protoc --verison

在这里插入图片描述
看到对应版本信息,说明protobuf 安装成功

================================
编写简单例子

新建person.proto,内容如下

syntax="proto2"
package test;
 
message Person {
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;
}

编译,生成C++代码

$ protoc ./person.proto --cpp_out=./

新建write_person.cpp 文件,代码如下

#include <iostream>
#include <fstream>
#include "person.pb.h"
 
using namespace test;
int main(){
	Person p;
	p.set_name("test");
	p.set_id(1);
	p.set_email("a.iabc.com");
	
	std::string str;
	p.SerializeToString(&str);
	std::cout<<str<<std::endl;  

	Person p1;
	p1.ParseFromString(str);
	std::cout<<"name:"<<p1.name()<<" email:"<<p1.email()<<std::endl;
  return 0;
}

编译

g++ write_person.cpp person.pb.cc -g -o write_person -I/usr/local/protobuf/include -L/usr/local/protobuf/lib -lprotoc -lprotobuf -lpthread -std=c++11

例子2
新建 people.proto

syntax="proto2";
message People{  
    required string name = 1;  
    required int32 age = 2;  
    optional string email = 3;  
    enum PhoneType{   
        MOBILE = 1;  
        HOME = 2;  
        WORK = 3;  
    }  
    message Phone{  
        required int32 id = 1;  
        optional PhoneType type = 2 [default = HOME];  
    }  
    repeated string phoneNum = 4;  
}  

生成cpp 文件

protoc people.proto --cpp_out=./

新建write_file.cpp 文件

#include<iostream>
#include "people.pb.h"
#include<fstream>
#include<string>

using namespace std;

int main()
{
	string buffer;
	People people;
	people.set_name("chemical");
	people.set_email("eiie@qq.com");
	people.set_age(29);
	people.add_phonenum("abc");
	people.add_phonenum("def");
	fstream output("myfile",ios::out|ios::binary);
	people.SerializeToString(&buffer);
	output.write(buffer.c_str(),buffer.size());
	
	return 0;
}

编译 write_file.cpp 文件

 g++ write_file.cpp people.pb.cc -g -o write_file -I/usr/local/protobuf/include -L/usr/local/protobuf/lib -lprotoc -lprotobuf -lpthread -std=c++11

新建读文件 read_file.cpp

#include <iostream>  
#include "people.pb.h"  
#include <fstream>  
#include <string>  
  
using namespace std;  
  
int main(){  
    People *people = new People;  
    char buffer[BUFSIZ];  
    fstream input("myfile",ios::in|ios::binary);  
    input.read(buffer,sizeof(People));  
    people->ParseFromString(buffer);  
    cout << people->name() << people->phonenum(0) << endl;  
    return 0;  
}  

编译读文件
g++ read_file.cpp people.pb.cc -g -o read_file -I/usr/local/protobuf/include -L/usr/local/protobuf/lib -lprotoc -lprotobuf -lpthread -std=c++11

运行 ./read_file,输出
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值