专栏首页编程技术专栏CentOS7安装protobuf(C++)和简单使用
原创

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

下载 protobuf

下载地址

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

在Linux 64位环境下进行编译

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

首先解压

tar zxvf protobuf-all-3.11.4.tar.gz

进入解压目录

cd protobuf-3.11.4/

安装 protobuf

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

则说明需要安装几个软件

sudo yum install autoconf 
sudo yum install automake 
sudo yum install libtool

以上安装成功后再次执行

./autogen.sh 

生成编译配置文件成功

运行配置脚本

./configure

make

sudo    #输入密码
make  #要编译很久
make check    #测试
make install    #安装

查看版本

protoc --version    #查看版本

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

简单使用protobuf

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

syntax = "proto3";
package IM;
message Account {
    //账号
    uint64 ID = 1;
    //名字
    string name = 2;
    //密码
    string password = 3;
}

message User {
    Account user = 1;
}

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

protoc --cpp_out=. Account.proto

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

编写程序main.cpp

#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;
}

编译

g++ main.cpp Account.pb.cc -o main -lprotobuf -std=c++11 -lpthread

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

运行

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

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一次完整的HTTP请求过程

    a)首先会搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存)

    WindSun
  • protobuf编译、安装和简单使用C++(Windows+VS平台)

    将刚才编译后的libprotobufd.lib和protoc.exe拷贝到自己创建的项目下,按住shift+右键,选择打开CMD,输入protoc --cpp_...

    WindSun
  • C++指针和引用及区别

    首先最重要的,variable的定义,当你申明一个变量的时候,计算机会将指定的一块内存空间和变量名进行绑定;这个定义很简单,但其实很抽象,例如:int x = ...

    WindSun
  • H3C 12508常用命令

      aaa                          Specify AAA configuration

    py3study
  • PHP+Ajax+Canvas

    ip地址: 计算机在网络中的唯一标识, 就是用来定位计算机的 缺点: 不好记

    用户3461357
  • 干货分享-Win2019上的Linux容器和Azure Stack上的K8

    这是上个周末刚闭幕的微软Tech Summit大会,笔者在课堂上提出的两个问题。

    盆盆
  • 聪明汉斯的故事

    汉斯的主人是一位退休的中学教师,名叫威廉·冯·奥斯滕。他想弄清楚,通过系统的授课,一匹马的思维能力究竟能提高和发展到什么程度。

    老肥码码码
  • 记录一次开发微信网页分享

    最近在做一个项目需求,分享领好书活动,获取用户的个人信息以及unionID,并诱导用户分享给好友或朋友圈,达到裂变拉新的目的。在做的过程中遇到了一些坑的地方,所...

    super.x
  • 360 副总裁颜水成教授: 深度学习的研发目标及 1×1 卷积的功能 | CCF-GAIR 2017

    7 月 7 日,雷锋网承办的第二届 CCF-GAIR 全球人工智能与机器人峰会在深圳如期开幕。奇虎 360 副总裁、首席科学家、IEEE Fellow、IAPR...

    AI科技评论
  • 织云Lite V1.4| 权限控制下的运营事故规避

    随着业务发展,设备越来越多,各业务机器运行各自的功能程序,团队成员也在持续增加,开发、测试、运维等不同团队的同事各司其职。多团队合作模式带来的问题就是运营事故的...

    织云平台团队

扫码关注云+社区

领取腾讯云代金券