热门标签 | 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;希望我这篇文章可以给同学们带来一点帮助。


推荐阅读
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • Java程序设计第4周学习总结及注释应用的开发笔记
    本文由编程笔记#小编为大家整理,主要介绍了201521123087《Java程序设计》第4周学习总结相关的知识,包括注释的应用和使用类的注释与方法的注释进行注释的方法,并在Eclipse中查看。摘要内容大约为150字,提供了一定的参考价值。 ... [详细]
  • Week04面向对象设计与继承学习总结及作业要求
    本文总结了Week04面向对象设计与继承的重要知识点,包括对象、类、封装性、静态属性、静态方法、重载、继承和多态等。同时,还介绍了私有构造函数在类外部无法被调用、static不能访问非静态属性以及该类实例可以共享类里的static属性等内容。此外,还提到了作业要求,包括讲述一个在网上商城购物或在班级博客进行学习的故事,并使用Markdown的加粗标记和语句块标记标注关键名词和动词。最后,还提到了参考资料中关于UML类图如何绘制的范例。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
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社区 版权所有