【ProtoBuf】在 Windows / Linux 安装 ProtoBuf(超详细教程)

一、ProtoBuf 在 Window 下的安装

1、下载 ProtoBuf 编译器

下载地址:github.com

可以不用下载最新版本,具体的下载根据自己电脑情况选择。

下载之后将压缩包解压到本地目录下。解压后的文件内包含 bin、include 文件,以及一个 readme.txt。


2、配置环境变量

把解压后文件中的 bin 目录配置到系统环境变量的 Path 中去。


3、检查是否配置成功

打开 cmd,输入:protoc --version

查看版本,有显示说明安装成功:


二、ProtoBuf 在 Linux 下的安装

1、下载 ProtoBuf

下载 ProtoBuf 前一定要安装依赖库:autoconf automake libtool curl make g++ unzip

如未安装,安装命令如下:

  • Ubuntu 用户选择:sudo apt-get install autoconf automake libtool curl make g++ unzip -y
  • CentOS 用户选择:sudo yum install autoconf automake libtool curl make gcc-c++ unzip

 下载地址:github.com

  • 如果要在 C++ 下使用 ProtoBuf,可以选择 cpp.zip。
  • 如果要在 JAVA 下使用 ProtoBuf,可以选择 java.zip。
  • 其他语⾔选择对应的链接即可。
  • 希望⽀持全部语言,选择 all.zip。

这里我希望支持全部语言,所以选择 protobuf-all-21.11.zip,右键将下载链接复制出来:https://github.com/protocolbuffers/protobuf/releases/download/v21.11/protobuf-all-21.11.zip

下载命令:wget https://github.com/protocolbuffers/protobuf/releases/download/v21.11/protobuf-all-21.11.zip

下载完成后,解压 zip 包:unzip protobuf-all-21.11.zip

解压完成后,会生成 protobuf-21.11 文件,进入文件:cd protobuf-21.11

内容如下:


2、安装 ProtoBuf

进入解压好的文件,执行以下命令

# 第⼀步执⾏autogen.sh,但如果下载的是具体的某⼀⻔语⾔,不需要执⾏这⼀步。
./autogen.sh # 第⼆步执⾏configure,有两种执⾏⽅式,任选其⼀即可,如下:
# 1、protobuf默认安装在 /usr/local ⽬录,lib、bin都是分散的
./configure 
# 2、修改安装⽬录,统⼀安装在/usr/local/protobuf下
./configure --prefix=/usr/local/protobuf

第一步:因为上面我选择的是 all.zip,所以需要执行:./autogen.sh

第二步:选择统一安装(推荐):./configure --prefix=/usr/local/protobuf

再依次执行:

make // 执⾏15分钟左右
make check // 执⾏15分钟左右
sudo make install

第一步:make

第二步:make check

有的人可能会在 make check 出现错误,例如:

出现以上错误的原因是 test 的模块里面有非常多的测试用例,这些用例对服务器环境要求特别严格,需要增大下 swap 分区,具体操作可参考:

Ubuntu 18.04 swap分区扩展_ubuntu18.04 如何查看swapfile文件路径-CSDN博客

(建议可以先扩大 3G,再执行 make check。如果还是报错,再扩大到 5G 重新执行 make check,如果 swap 分区为 0,就直接跳过这一步 make check)

执行 make check 后,出现以上内容就可以执行第三步:sudo make install

如果在执行 configure 时,当时选择了第一种执行方式,也就是:./configure,那么到这就可以正常使用 protobuf 了。但如果是选择了跟我一样的第二种执行方式,即修改了安装目录:./configure --prefix=/usr/local/protobuf,那么还需要在 /etc/profile  中添加一些内容:

先执行命令:sudo vim /etc/profile

# 添加内容如下:#(动态库搜索路径) 程序加载运⾏期间查找动态链接库时指定除了系统默认路径之外的其他路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib/
#(静态库搜索路径) 程序编译期间查找动态链接库时指定查找共享库的路径
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib/
#执⾏程序搜索路径
export PATH=$PATH:/usr/local/protobuf/bin/
#c程序头⽂件搜索路径
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/protobuf/include/
#c++程序头⽂件搜索路径
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/protobuf/include/
#pkg-config 路径
export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/

最后一步,重新执行 /etc/profile 文件:

source /etc/profile


三、检查是否安装成功

输入:protoc --version 查看版本,有显示说明安装成功:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/46902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM框架的宠物领养系统【附源码和运行步骤】

基于SSM框架的宠物领养系统 一、项目介绍用户模块宠物模块领养模块管理员模块 二、项目技术栈三、项目运行四、项目演示用户领养界面管理员界面 总结 大家好,这里是程序猿代码之路!在当今社会,宠物已经成为许多家庭的重要成员,带给…

如何解决手机游戏因IP代理被封禁无法正常游戏的问题?

在当前的网络环境下,许多手机游戏为了维护游戏的公平性和安全性,会采取措施对使用IP代理的玩家进行封禁,导致他们无法正常访问游戏。这种情况对于一些需要使用IP代理的用户来说可能显得很棘手,但实际上有几种技术性的解决方案可以…

4个免费自动生成文章的软件,轻松创作高质量文章

对于创作都而言,能够轻松创作出高质量的文章是每个创作者都想实现的想法,但如何依靠创作者自己去人工手动完成写作,那么将会需要付出很多时间与精力,并且还要有好的创作灵感,因此,通过人工手动创作高质量的…

记录些MySQL题集(1)

Innodb 是如何实现事务的? InnoDB是MySQL数据库的一个存储引擎,它支持事务处理。事务处理是数据库管理系统执行过程中的一个逻辑单位,由一个或多个SQL语句组成,这些语句要么全部执行,要么全部不执行,是一个…

PyTorch复现PointNet++——模型训练+模型测试

本博文主要实现对PointNet源码进行调试,模型训练模型测试。 一、下载源码和数据集 论文:PointNet: Deep Hierarchical Feature Learning on Point Sets in a Metric Space GitHub源码:Pointnet2_pytorch 数据集包括三种:分类、零…

SpringBoot @Value注解优化

前言&背景 SpringBoot的Value功能之一可以从配置文件读取并赋值到对象的属性。 需求方要求原来从配置文件中修改的配置参数需要提供界面修改,但是接受配置完后重启服务。 分析&方案 我们主要使用了Value注解,所以在做的时候需要从Value注解下…

django报错(三):No crontab program或got an unexpected keyword argument ‘user’

Crontab是linux系统上的定时管理模块,简单配置,灵活使用。但是要在windows使用必须借助Cygwin等虚拟工具,否则会报错“No crontab program”。如下图: python-crontab是其提供了python模块对crontab的访问,即可以通过p…

写材料word和PPT

一、WORD 1、写内容 2、参考GPT改:内容、逻辑结构、语句 3、查标题及其标号 4、修改格式:仿宋 、正文统一为小三,标题三号,1.5倍行距,加页码。 采用VBA代码自动修改,不知为何标题无法修改字体 Sub 插入页…

EasyAnimate-v3版本支持I2V及超长视频生成

阿里云人工智能平台(PAI)自研开源的视频生成项目EasyAnimate正式发布v3版本: 支持 图片(可配合文字) 生成视频 支持 上传两张图片作为起止画面 生成视频 最大支持720p(960*960分辨率) 144帧视…

【Git分支管理】分支策略 | Bug分支

目录 1.分支策略 2.特殊场景-Bug分支 2.1 master出现bug ​2.2 dev2正在开发☞stash区域 2.3 dev2正在开发master出现bug 2.3.1 fix_bug修复bug和master合并 2.3.2 dev2分支开发完和master合并 合并冲突:merge☞手动解决☞提交没有合并冲突:mer…

ns3-gym入门(三):在opengym基础上实现一个小小的demo

因为官方给的"opengym""opengym-2"这两个例子都很简单,所以自己改了一个demo,把reward-action-state相互影响的关系表现出来 一、准备工作 在ns3.35/scratch目录下创建一个文件夹: (后续的运行指令后面都需要…

python求两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…

【深度学习】基于深度学习的模式识别基础

一 模式识别基础 “模式”指的是数据中具有某些相似特征或属性的事物或事件的集合。具体来说,模式可以是以下几种形式: 视觉模式 在图像或视频中,模式可以是某种形状、颜色组合或纹理。例如,人脸、文字字符、手写数字等都可以视…

JS【实战】CSS 样式相关的处理

CSS 样式键转换 如 fontSize -> font-size // 函数封装 -- CSS样式键转换,如 fontSize -> font-size function CSSformatKey(oldKey) {// 查找所有大写字母,转换为 "-小写"const newKey oldKey.replace(/[A-Z]/g, (c) > -${c.toLoc…

一图了解网络通信原理

📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 ☁️运维工程师的职责:监…

学习笔记(数据库)1

数据库 sun solaris gnu 1、分类: 大型 中型 小型 ORACLE MYSQL/MSSQL SQLITE DBII powdb 关系型数据库 2、名词: DB 数据库 select update database DBMS 数据库管理系统 MIS 管理信息系统 OA 办公自动…

正则表达式怎么控制匹配的字符串更近的一个

http((?!http).)*m3u8 正则表达式怎么控制匹配的字符串更近的一个 正则如何匹配最近的字符 正则如何匹配最近的两个字符 怎么控制只要离字符串b匹配更近一点的字符串a 解释 a.b,它将会匹配最长的以a开始,以b结束的字符串 a.?b匹配最短的&#xff…

zookeeper+kafka群集

什么是消息队列 消息队列(Message Queue)是一种通信方法,用于在分布式系统中异步地传递消息。消息队列通过消息中间件将消息从发送者(Producer)传递给接收者(Consumer),允许应用程序…

废品回收小程序:高效便捷回收,推动市场发展

随着互联网的发展和人们日益提升的环保意识,对废品回收市场的关注度不断提高,废品回收成为了当下发展前景巨大的行业之一。 传统的废品回收体系不完善,存在较大的不便利性,回收流程繁琐。为了方便大众回收,连接回收企…

git环境编译升级

1. 下载 wget https://www.kernel.org/pub/software/scm/git/git-2.43.0.tar.gz 编译从github下载的压缩包可能会报错,建议从git官网下载压缩包。 https://www.kernel.org/ 2. 编译 tar -zxvf git-2.34.5.tar.gz cd git-2.34.5 make prefix/usr/local all sudo ma…