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


推荐阅读
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • Java程序设计第4周学习总结及注释应用的开发笔记
    本文由编程笔记#小编为大家整理,主要介绍了201521123087《Java程序设计》第4周学习总结相关的知识,包括注释的应用和使用类的注释与方法的注释进行注释的方法,并在Eclipse中查看。摘要内容大约为150字,提供了一定的参考价值。 ... [详细]
  • Week04面向对象设计与继承学习总结及作业要求
    本文总结了Week04面向对象设计与继承的重要知识点,包括对象、类、封装性、静态属性、静态方法、重载、继承和多态等。同时,还介绍了私有构造函数在类外部无法被调用、static不能访问非静态属性以及该类实例可以共享类里的static属性等内容。此外,还提到了作业要求,包括讲述一个在网上商城购物或在班级博客进行学习的故事,并使用Markdown的加粗标记和语句块标记标注关键名词和动词。最后,还提到了参考资料中关于UML类图如何绘制的范例。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
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社区 版权所有