如何编译安装 protocolBuffer(for C++)

【linux ProtoBuf安装及使用】 XML和JSON是目前常用的数据交换格式,它们直接使用字段名称维护序列化后类实例中字段与数据之间的映射关系,一般用字符串的形式保存在序列化后的字节流中。消息和消息的定义相对独立,可读性较好。但序列化后的数据字节很大,序列化和反序列化的时间较长,数据传输效率不高。 阅读详情

一、简述

今天这一篇文章讲一讲 protocolBuffer 的编译安装步骤。首先了解一下什么是protocolBuffer。(以下摘自百度百科),如果还不不明白,go on 百度一下。

protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。

二、编译步骤

1、下载源码

官网地址:https://developers.google.com/protocol-buffers/.

官网提供了两个下载选项。

这里写图片描述

第一个选项Protocol buffers downloads and instructions

打开之后,我们看到最新的源码已经迁移至GitHub,所以下载源码直接打开这个链接,跳转到GitHub之后便可以下载。

这里写图片描述

第二个选项 The latest protocol buffers code and release。

这里是不同语言对应的 protocol buffers 源码包。所以这里下载的包相对第一个选项中下载的包会相对小一点,而且这里下载的包中包含了gmock模块(下面会涉及到此模块的应用)。

这里写图片描述

下面我们对比一下两个选项下载的包有什么不同。左图为所有版本的包,右图为C++版本的包。
我们看到右图中多了gmock文件夹,而左图多了类似java、php、python等这样的文件夹,这也说明了这两个包的区别,一般如果是指针对某种语言进行开发,下载第二个选项中的包即可。

这里写图片描述 这里写图片描述

2、编译源码

如何编译源码,其实我们下载的包中有详细的说明,而下面我们就按照官方文档进行编译源码。

我们对下载的包进行解压,然后在根目录中我们找到 README.md文件。打开我们会看到下面一段介绍。也就是说protocol的编译器是用C++编写的,如果我们将protocol 用于C++,就根据根据src目录下的README.md文件去编译安装protocol。

The protocol compiler is written in C++. If you are using C++, please follow
the [C++ Installation Instructions] (src/README.md) to install protoc along
with the C++ runtime.

那我们直接去看src目录下的README.md文件就好了。这里对于Unix和Window系统中安装protocol分别做了介绍。

这里只介绍Windows系统的,如果Unix系统的小伙伴可以直接看文件中的介绍。文档中又让我们去看cmake目录下的README.md文件,一波三折,看了这么多,原来最终的安装步骤就在cmake目录下的README.md文件中了。

C++ Installation - Windows

If you only need the protoc binary, you can download it from the release
page:

https://github.com/google/protobuf/releases

In the downloads section, download the zip file protoc-$VERSION-win32.zip.
It contains the protoc binary as well as public proto files of protobuf
library.

To build from source using Microsoft Visual C++, see [cmake/README.md] (../cmake/README.md).

直奔主题,打开cmake目录下的README.md文件,我们看到详细的说明、安装步骤,下面我就直接给大家介绍如何编译安装了,有兴趣的小伙伴也可以对照文档说明进行编译。

(1)打开命令提示符

我是安装的VS2015,所以打开 VS2015 x64本机工具命令提示符。

这里写图片描述

(2)切换目录到你需要安装protocolBuffer的目录

这里我新建了一个probuf文件夹,然后将下载的protocolbuf源码拷贝到该文件夹下,并创建一个install文件夹(可以手动创建或者使用命令:mkdir install)。

这个install文件夹就是编译完之后头文件、lib等文件的目录。

这里写图片描述 这里写图片描述

(3)安装cmake编译工具

如果电脑上没有安装cmake,可以去官网下载最新的cmake安装包,然后将cmake.exe的路径添加到环境变量Path中。

cmake官网:https://cmake.org/

可以使用命令 set PATH=%PATH%;cmake.exe的路径;
such as : set PATH=%PATH%;C:\Program Files (x86)\CMake\bin

(4)CMake 配置

进入到下载源码文件夹下的cmake文件夹下,然后创建build文件夹并进入到此文件夹。

这里写图片描述

在build文件夹下,我们需要构建debug版本和release版本。所以需要创建这两个文件夹。

对于每个版本进入到该目录下使用下面的命令即可。

debug :

cmake -G “NMake Makefiles” ^
-DCMAKE_BUILD_TYPE=Debug ^
-DCMAKE_INSTALL_PREFIX=../../../../install ^
../..

release

cmake -G “NMake Makefiles” ^
-DCMAKE_BUILD_TYPE=Release ^
-DCMAKE_INSTALL_PREFIX=../../../../install ^
../..

这里写图片描述

执行nmake

这里写图片描述

(5)安装编译好的protobuf

执行nmake install

这里写图片描述

执行完之后我们会在之前创建的install文件夹下看到这几个文件夹。到达这里我们的编译安装工作已经完成,下面就可以使用了。

这里写图片描述

下面是文档中给出对这几个文件夹的介绍:

bin - that contains protobuf protoc.exe compiler;
include - that contains C++ headers and protobuf *.proto files;
lib - that contains linking libraries and CMake configuration files for protobuf package.

(6)安装编译中可能遇到的问题

如果大家下载的源码中不包含gmock文件夹的话,编译的时候会报错。如果从上面所说的第二个选项中下载的不同语言对应的 protocol buffers 源码包,那么会包含gmock模块,如果是从第一个选项中下载的是不包含此模块的。

所以第一种方法就是下载第二个选项的源码包,第二种方法就是修改源码包中cmake文件夹下的CMakeLists.txt文件,跳过gmock的编译(gmock模块用于protobuf的单元测试)。

下方是官方文档给的说明,也就是上面所说的两种方法。

Protobuf unit-tests require gmock to build. If you download protobuf source code
from the releases page, the gmock directory should already be there. If you checkout
the code via git clone, this gmock directory won’t exist and you will have to
download it manually or skip building protobuf unit-tests.

第一种方法就不给大家介绍了,直接去官网下载即可。

第二种方法,我们打开cmake文件夹下的CMakeLists.txt文件,然后找到protobuf_BUILD_TESTS字段,将后面的ON改成OFF即可。

这里写图片描述

(7)检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”

遇到这种问题,一般是我们我们项目的运行库是MDd,而加载的lib文件是MTd,所以导致编译出错。

所以我们如果不修改CMakeLists.txt文件中的配置项时,默认生成的lib库为MTd(debug版本)或者MT(release版本)。

如果要MDd版本的lib文件,那么就得修改CMakeLists.txt,如何修改,见下方。
将下图中红色标记的地方改成MD即可。

这里写图片描述

所以可以生成MDd、MD、MTd、MT四种不同的运行库。debug版本生成的库末尾带’d’,标识debug版本的库。我们在使用的时候需要注意不同的版本用不同的库。

这里写图片描述

Protobuf3.1.0在win7+VS2013的编译和使用 阅读详情

相关推荐

Protobuf 安装指南

首先,我们需要从 Protobuf 的官方网站(https://developers.google.com/protocol-buffers)下载 Protobuf 的安装包。它不仅提供了方便的数据交换格式,还提供了多种语言的支持,使得不同平台之间的数据通信变得更加轻松和快捷。以上代码演示了如何创建一个 person 对象并将其序列化为字节流,然后再将字节流反序列化为一个新的 person 对象,并输出其中的字段值。以上是一个简单的 Protobuf 定义,包含了人的姓名、年龄和爱好。

CodeLancerX的博客 2276

protocol buffers(protobuf)安装教程

本文按照mac讲解protobuf的安装,windows上比较好安装按照mac的基本流程就可以安装成功,mac上的安装有的时候比较容易出现问题。

有用的话关个注,点个赞,收个藏🫶。 3077

Protocol Buffer技术深入理解(C++实例)

C++实例Protocol Buffer技术详解,感兴趣的朋友可以了解下

protocol-buffer安装和使用

protocol buffer是Google发布的一种独立的数据交换格式,类似于json,用于数据的序列化和解析。不同点是不能直接在各编程语言中使用,需要先在一个proto文件中定义需要传输的数据格式,然后使用proto工具把proto文件编译成想要的语言,如java、go、php等。然后在代码中,使用语言对应的protocol buffer包调用proto工具生成的文件,完成数据的序列化。

u012830303的博客 2146

Ansys Icepak:通过 ECAD 导入和非共形网格划分掌握电子冷却

通过将 Icepak 与 HFSS(用于高频电磁学)、Ansys Mechanical(用于结构分析)和 Ansys Fluent(用于流体动力学)等 Ansys 产品相结合,工程师可以在单个工作流程中仿真电子系统的完整行为,从热和电气动力学到机械和流体动力学。精细网格可以应用于关键区域,而在不太重要的区域使用较粗的网格,从而在不牺牲精度的情况下加快仿真速度。这些功能使 Ansys Icepak 成为从事复杂电子设计的工程师不可或缺的工具,可实现更精确的热分析并缩短开发时间。用于高效仿真的非共形网格划分。

jkh920184196的博客 1395

使用 VPN 访问太理内部网相关问题总结【太原理工大学】

电脑连接 VPN,访问校园内部网相关问题总结,太原理工大学。

m0_52861684的博客 9883

ProtocolBuffer for Objective-C 运行环境配置

1,下载ProtocolBuffer包,并按照包中根目录下README.txt安装。 http://code.google.com/intl/zh-CN/apis/protocolbuffers/ 当前最新版本2.4.1 最后make install后,会生成编译器protoc,并拷贝到/usr/local/bin目录下。   2,下载Objective-C comp

liliangchw的专栏 5519

Nvidia Jetson AGX Orin 如何进入 Recovery Mode(刷机注意事项)

Jetson Orin 如何进入Recovery mode + 刷机注意事项

Pandako's Blog 1万+

ProtocolBuffer for Objective-C 运行环境配置及使用

一 、前言 最近要做一个新的项目需要用到Google的Protocol Buffer,所以最近两天一直在学习这个。在网上看了很多人写的相关博客,发现他们写的配置环境的步骤不尽相同,并且不需要那么复杂,所以就想写一篇最新的文章。 配置环境:mac OS 10.11.1 本文若有叙述错误之处,欢迎指点。 二 、Protocol Buffer简介 Protocolbuffer(简称Protobuf

libragirlwdy的博客 735

FPGA八股文(2)——笔试的FPGA问题汇总(持续更新)

常见FPGA笔试题的概念总结

居安士的博客 8909

使用单片机开发PWM的案例&相关项目源码

该项目使用STM32单片机生成PWM信号,通过改变PWM的占空比来控制连接在PWM输出引脚(如PA0)上的LED的亮度。在主循环中,通过改变比较值,PWM信号的占空比在0%到100%之间变化,从而实现LED亮度的渐变效果。这个项目是一个基础的PWM控制示例,通过学习和实践这个项目,可以掌握PWM的基本原理和使用方法,并为进一步开发和应用打下良好的基础。该项目实现了使用STM32单片机产生PWM信号,并通过改变PWM的占空比来控制LED的亮度。配置PWM输出引脚(如PA0),确保其模式为PWM输出。

清风明月 643

分享iOS使用ProtocolBuffer的方法

简要描述iOS实际开发中,怎么使用Google的 ProtocolBuffer。包括搭建protocolbuffer编译器,cocoapods导入。C++使用Protocolbuffer的思路。使用NSURLSessionDataTask来使用Protocolbuffer。

AutoWaout的博客 5579

AI在个性化营养方案制定中的应用:从代谢组学到膳食规划

本文章的主要目的是全面探讨AI在个性化营养方案制定过程中的应用,从代谢组学的数据收集与分析,到基于这些数据制定合理的膳食规划。范围涵盖了AI技术在该领域的核心概念、算法原理、数学模型、实际项目应用,以及相关的工具和资源推荐等方面。旨在为科研人员、营养师、软件开发人员等提供一个系统的知识体系,帮助他们更好地理解和应用AI技术来实现个性化营养方案的制定。核心概念与联系:介绍AI、代谢组学和膳食规划的核心概念,以及它们之间的相互联系,并通过文本示意图和Mermaid流程图进行展示。

架构师的AI之路,分享AI应用开发架构的学习与实践。 1032

ProtocolBuffer Mac安装步骤

一、安装ProtocolBuffer *********************附下载地址**************************** ProtocolBuffer2.4.1下载地址 翻墙 http://code.google.com/p/protobuf/downloads/list 国内 http://pan.baidu.com/s/1lgGn8

L的博客 1169

SAP 财务BAPI_ACC_DOCUMENT_POST批导的税务tax

最近遇到了关于SAP财务凭证批导要bapi:BAPI_ACC_DOCUMENT_POST增加税的功能要求,查阅了一众文献发现都不尽如人意,所以想着自己写一个趟过的雷吧。 一般前台sap的凭证是有自动计算税码的勾选框的,但是bapi却并没有这个字段。 实际操作过程中1.可以定义一个税额的结构,参考bapiactx09 2.在会计分录上传如果需要增加税码的时候,譬如总账gl,需要对应tax_code 3.通过CALCULATE_TAX_FROM_GROSSAMOUNT 计算出税额和acct_k...

qq_35640448的博客 3187

化工设备设计软件:PVELITE二次开发_(12).数据导入导出与兼容性

在数据导入之前,需要定义数据在PVELITE中的结构。可以通过编程接口定义字段名称和数据类型。# 导入必要的库 import pvelite # 创建PVELITE实例 pve = pvelite . PVELITE() # 定义CSV数据结构 csv_structure = {

kkchenjj的博客 1216

ProtocolBuffer for objective-c的使用

ProtocolBuffer的使用参看了如下网址的使用 http://www.cnblogs.com/uniy/archive/2011/12/21/2296405.html 补充注意点: (1)第一步出现问题,发现要安装autoconf、automake、libtool、m4这四个工具 (2) 编译出错 mac 10.5 改成 iOS  (3) i

邱浩东的专栏 1285

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

[iOS]ProtocolBuffer简介

1、什么是ProtocolBufferProtocolBuffer是由Google开发的一种数据格式。这种格式与平台无关,可用于通讯协议,数据存储等。ProtocolBuffer跟我们常见的XML、json格式的数据比,传输更高效,并且体积更小。在RPC数据交换格式和数据存储领域,ProtocolBuffer具有先天的优势,因此得到很好的应用。具体请google官方描述:戳这里。2、在iOS项目中...

sz_vcp2007的专栏 547

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

如何使用谷歌的protocolBuffer(for C++)

简述在上一篇 如何编译安装 protocolBuffer(for C++) 文章中讲述了如何编译,今天讲述一下如何使用,以及编译生成的一些选项以及额外的一些介绍。1、新建.proto文件下面我们先写一个简单的protobuf文件。新建一个以.proto结尾的文件,如message.proto。然后添加一个Student结构。syntax = "proto2"; option optimize_fo

前行之路还需前行 1438

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

protobuf-c之arm编译

编译前工作         需要先安装好protocol buffer库并配置好环境变量,请参考protocol buffer之linux编译。         解压源码,例如:protobuf-c.zip到目录/home/workspac...

hezhanran的博客 819

ProtocolBuffer入门和使用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wHRIablp-1681966664637)(ProtocolBuffer.assets/image-20220614102631349.png)](基本和go的内置数据类型是一一映射,除了没有map)(基本和go的内置数据类型是一一映射,除了没有map)

wspppdy的博客 976
上一篇: QGraphicsView 如何实现百度地图按照鼠标点进行放大缩小效果
下一篇: 如何使用谷歌的protocolBuffer(for C++)
前行中的小猪
前行中的小猪 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄10年 4万+粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值