热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux环境下c++实现简单的protobuf调用

一.安装protobuf1.安装必要的工具yuminstall-yautoconfyuminstall-yautomakeyuminstall-ylibtoolyuminstal

一.安装protobuf

1.安装必要的工具

        yum install -y autoconfyum install -y automakeyum install -y libtoolyum install -y curlyum install -y makeyum install -y g++yum install -y unzip

2.将protobuf压缩包下载在/usr/local/目录下

cd /usr/local/
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.7.1/protobuf-cpp-3.7.1.tar.gz

3.开始解压并安装

//解压
tar -xzvf protobuf-cpp-3.7.1.tar.gz//进入解压后的目录
cd protobuf-3.7.1//依次执行命令,完成安装
./autogen.sh
./configure
make
make check
sudo make install
sudo ldconfig//删除压缩包
rm -f ../protobuf-cpp-3.7.1.tar.gz

4.测试是否安装成功

执行protoc --version,看一下是否能打印出版本号



二.用c++实现简单的例子

创建一个proto目录,用于保存.proto文件

mkdir protocd proto

创建一个User.proto文件

syntax = "proto2";message User
{optional uint64 id = 1;optional string nickName = 2;
}

写一个编译脚本gen.sh

proto_dir=./proto_src=./srctarget=mode#删掉生成文件,保证每次执行都是最新的
rm -rf src#创建一个目录,用来保存pb.h pb.cc pb.o 让代码看起来更干净一些
mkdir src#以c++的格式生成pb文件,*.pb.h *.pb.cc
protoc -I=$proto_dir --cpp_out=$proto_src $proto_dir/*.proto

执行脚本 sh gen.sh

 打开src目录 cd /src

 再到proto同目录级创建一个test目录

mkdir testcd test

编写一个main.cpp

#include
#include "../proto/src/User.pb.h"int main(int argc, char** argv)
{//创建一个User结构User user1;user1.set_id(100);user1.set_nickname("小明");//将结构序列化成stringstd::string str &#61; "";user1.SerializeToString(&str);std::cout <}

写一个简单的makefile文件

cc&#61;g&#43;&#43;#编译过程
cc_flags&#61;-std&#61;c&#43;&#43;11 \#链接过程&#xff0c;需要注意的是&#xff0c;prototbuf需要将protobuf的动态链接库引入&#xff0c;还需要libpthread.so库
ln_flags&#61;-L/usr/local/lib -lprotobuf \-lpthread \#所有的.o文件
obj&#61;main.o \../proto/src/User.pb.o \#目标文件
target&#61;process#依赖关系
$(target) : $(obj)$(cc) $(ln_flags) $(obj) -o $(target)%.o : %.cpp$(cc) $(cc_flags) -c $<-o $&#64;%.o: %.cc$(cc) $(cc_flags) -c $<-o $&#64;clean:rm -f $(obj) $(target)

写一个简单的run.sh脚本

ulimit -c 100000 #加上这一行有崩溃的时候会产生core文件&#xff0c;感兴趣的可以了解一下
export LD_LIBRARY_PATH&#61;/usr/local/lib/: #需要将protobuf的库引入
./process

执行make命令&#xff0c;产生process可执行文件

运行run.sh脚本 sh run.sh 查看结果

 6.总结

    小编写这个博客主要是想给刚接触protobuf的同学做一个简单的引导&#xff0c;protobuf运用广泛&#xff0c;目前各大公司的通信协议使用的都是protobuf&#xff0c;感兴趣的同学可以自己试着学一下。刚接触的时候&#xff0c;难免会碰到或多或少的坑&#xff0c;希望我这篇文章可以给同学们带来一点帮助。


推荐阅读
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 2017-2018年度《网络编程与安全》第五次实验报告
    本报告详细记录了2017-2018学年《网络编程与安全》课程第五次实验的具体内容、实验过程、遇到的问题及解决方案。 ... [详细]
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • 本文详细解析了Java中throw和throws的关键区别,同时涵盖了JDK的定义、Java虚拟机的关键约定、Java的跨平台性、自动垃圾回收机制、源文件结构、包的概念及作用等多个核心知识点,旨在帮助学生更好地准备Java期末考试。 ... [详细]
  • 本文探讨了2019年前端技术的发展趋势,包括工具化、配置化和泛前端化等方面,并提供了详细的学习路线和职业规划建议。 ... [详细]
  • Windows 7 64位系统下Redis的安装与PHP Redis扩展配置
    本文详细介绍了在Windows 7 64位操作系统中安装Redis以及配置PHP Redis扩展的方法,包括下载、安装和基本使用步骤。适合对Redis和PHP集成感兴趣的开发人员参考。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 本文详细介绍了 Java 中 org.geotools.data.shapefile.ShapefileDataStore 类的 getCurrentTypeName() 方法,并提供了多个代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 本文将详细介绍如何在没有显示器的情况下,使用Raspberry Pi Imager为树莓派4B安装操作系统,并进行基本配置,包括设置SSH、WiFi连接以及更新软件源。 ... [详细]
  • 深入理解Java多线程并发处理:基础与实践
    本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ... [详细]
  • 搭建Jenkins、Ant与TestNG集成环境
    本文详细介绍了如何在Ubuntu 16.04系统上配置Jenkins、Ant和TestNG的集成开发环境,涵盖从安装到配置的具体步骤,并提供了创建Windows Slave节点及项目构建的指南。 ... [详细]
  • 本文详细探讨了Java中的ClassLoader类加载器的工作原理,包括其如何将class文件加载至JVM中,以及JVM启动时的动态加载策略。文章还介绍了JVM内置的三种类加载器及其工作方式,并解释了类加载器的继承关系和双亲委托机制。 ... [详细]
  • 本文介绍如何配置SecureCRT以正确显示Linux终端的颜色,并解决中文显示问题。通过简单的步骤设置,可以显著提升使用体验。 ... [详细]
author-avatar
xsf9507
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有