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


推荐阅读
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • 本文介绍了如何在不同操作系统上安装Git,以及一些基本和高级的Git操作,包括项目初始化、文件状态检查、版本控制、分支管理、标签处理、版本回退等,并简要提及了开源许可协议的选择。 ... [详细]
  • 本文将详细介绍如何注册码云账号、配置SSH公钥、安装必要的开发工具,并逐步讲解如何下载、编译 HarmonyOS 2.0 源码。通过本文,您将能够顺利完成 HarmonyOS 2.0 的环境搭建和源码编译。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ... [详细]
  • 在Ubuntu 16.10 (x86) 上安装 WordPress 4.7.115
    本文介绍如何在Ubuntu 16.10 (x86) 系统上安装WordPress 4.7.115,包括下载、解压、配置等步骤,确保安装过程顺利进行。 ... [详细]
  • 在Ubuntu 18.04上使用Nginx搭建RTMP流媒体服务器
    本文详细介绍了如何在Ubuntu 18.04上使用Nginx和nginx-rtmp-module模块搭建RTMP流媒体服务器,包括环境搭建、配置文件修改和推流拉流操作。适用于需要搭建流媒体服务器的技术人员。 ... [详细]
  • 本文介绍了如何在 MapReduce 作业中使用 SequenceFileOutputFormat 生成 SequenceFile 文件,并详细解释了 SequenceFile 的结构和用途。 ... [详细]
  • 在安装并配置了Elasticsearch后,我在尝试通过GET /_nodes请求获取节点信息时遇到了问题,收到了错误消息。为了确保请求的正确性和安全性,我需要进一步排查配置和网络设置,以确保Elasticsearch集群能够正常响应。此外,还需要检查安全设置,如防火墙规则和认证机制,以防止未经授权的访问。 ... [详细]
  • 本文介绍了 Vue 开发的入门指南,重点讲解了开发环境的配置与项目的基本搭建。推荐使用 WebStorm 作为 IDE,其下载地址为 。安装时请选择适合您操作系统的版本,并通过 获取激活码。WebStorm 是前端开发者的理想选择,提供了丰富的功能和强大的代码编辑能力。 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • Node.js在服务器上的多种部署策略
    本文探讨了Node.js应用程序在服务器上部署的几种有效方法,包括使用Screen、PM2以及通过宝塔面板进行简易管理。 ... [详细]
  • Beetl是一款先进的Java模板引擎,以其丰富的功能、直观的语法、卓越的性能和易于维护的特点著称。它不仅适用于高响应需求的大型网站,也适合功能复杂的CMS管理系统,提供了一种全新的模板开发体验。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
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社区 版权所有