前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CentOS7安装protobuf(C++)和简单使用

CentOS7安装protobuf(C++)和简单使用

原创
作者头像
WindSun
修改2020-03-23 11:00:13
3K0
修改2020-03-23 11:00:13
举报
文章被收录于专栏:编程技术专栏

下载 protobuf

下载地址

使用wget下载,或者手动下载好FTP传到Linux上

在Linux 64位环境下进行编译

我下载的是protobuf-all-3.11.4.tar.gz 包

首先解压

代码语言:txt
复制
tar zxvf protobuf-all-3.11.4.tar.gz

进入解压目录

代码语言:txt
复制
cd protobuf-3.11.4/

安装 protobuf

此时可能会遇到报错,如:autoreconf: command not found

则说明需要安装几个软件

代码语言:txt
复制
sudo yum install autoconf 
sudo yum install automake 
sudo yum install libtool

以上安装成功后再次执行

代码语言:txt
复制
./autogen.sh 

生成编译配置文件成功

运行配置脚本

代码语言:txt
复制
./configure

make

代码语言:txt
复制
sudo    #输入密码
make  #要编译很久
make check    #测试
make install    #安装

查看版本

代码语言:txt
复制
protoc --version    #查看版本

注:新版本不需要执行autogen.sh脚本,直接./configure就行,./configure不用添加--prefix,默认位置就在/usr/local/

简单使用protobuf

创建一个.proto文件:addressbook.proto,内容如下

代码语言:txt
复制
syntax = "proto3";
package IM;
message Account {
    //账号
    uint64 ID = 1;
    //名字
    string name = 2;
    //密码
    string password = 3;
}

message User {
    Account user = 1;
}

编译.proto文件,生成C++语言的定义及操作文件

代码语言:txt
复制
protoc --cpp_out=. Account.proto

生成的文件:Account.pb.h, Account.pb.cc

编写程序main.cpp

代码语言:txt
复制
#include <iostream>
#include <fstream>
#include "Account.pb.h"

using namespace std;

int main(int argc, char** argv)
{
    IM::Account account1;
    account1.set_id(1);
    account1.set_name("windsun");
    account1.set_password("123456");

    string serializeToStr;
    account1.SerializeToString(&serializeToStr);
    cout <<"序列化后的字节:"<< serializeToStr << endl;


    IM::Account account2;
    if(!account2.ParseFromString(serializeToStr))
    {
        cerr << "failed to parse student." << endl;
        return -1;
    }
    cout << "反序列化:" << endl;
    cout << account2.id() << endl;
    cout << account2.name() << endl;
    cout << account2.password() << endl;

    google::protobuf::ShutdownProtobufLibrary();

    return 0;
}

编译

代码语言:txt
复制
g++ main.cpp Account.pb.cc -o main -lprotobuf -std=c++11 -lpthread

注:程序使用protobuf,编译没有问题,运行时一到建立protobuf对象就崩溃,搜索了半天没找到原因,后来偶然看到以前正常使用的makefile文件中后面加了-lpthread,加上就好了。我自己的程序没有用到多线程,应该是protobuf3里面用到了。

运行

可以看到能正常序列化到string,并能反序列化。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 下载 protobuf
  • 安装 protobuf
  • 简单使用protobuf
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档