grpc|protobuf的安装、编译、运行笔记(C++)

news/2024/5/15 22:38:13/文章来源:https://blog.csdn.net/m0_46201544/article/details/126811237

一、下载grpc源码

如果你的电脑/服务器可以做代理,然后稳定链接上 GitHub 那么完全可以按照 GitHub 的官方文档来操作,我这里采用 Gitee 镜像来操作

git clone https://gitee.com/jiangxy__loey/grpc.git

在这里插入图片描述

二、下载依赖库

进入grpc目录,然后里面有一个 .gitmodules 文件,我们将其替换成 gitee 的链接,首先清空内容

> .gitmodules

然后再将新内容填入:

[submodule "third_party/zlib"]path = third_party/zlib#url = https://github.com/madler/zliburl = https://gitee.com/jiangxy__loey/zlib.git# When using CMake to build, the zlib submodule ends up with a# generated file that makes Git consider the submodule dirty. This# state can be ignored for day-to-day development on gRPC.ignore = dirty
[submodule "third_party/protobuf"]path = third_party/protobufurl = https://gitee.com/jiangxy__loey/protobuf.git#url = https://github.com/google/protobuf.git
[submodule "third_party/gflags"]path = third_party/gflags#url = https://github.com/gflags/gflags.giturl = https://gitee.com/jiangxy__loey/gflags.git
[submodule "third_party/benchmark"]path = third_party/benchmark#url = https://github.com/google/benchmarkurl = https://gitee.com/jiangxy__loey/benchmark.git
[submodule "third_party/boringssl-with-bazel"]path = third_party/boringssl-with-bazel#url = https://github.com/google/boringssl.giturl = https://gitee.com/jiangxy__loey/boringssl-with-bazel.git
[submodule "third_party/re2"]path = third_party/re2#url = git://github.com/google/re2.giturl = https://gitee.com/hejuncheng1/re2.git
[submodule "third_party/cares/cares"]path = third_party/cares/cares#url = https://github.com/c-ares/c-ares.giturl = https://gitee.com/jiangxy__loey/cares.git#branch = cares-1_12_0
[submodule "third_party/bloaty"]path = third_party/bloaty#url = https://github.com/google/bloaty.giturl = https://gitee.com/jiangxy__loey/bloaty.git
[submodule "third_party/abseil-cpp"]path = third_party/abseil-cpp#url = https://github.com/abseil/abseil-cpp.giturl = https://gitee.com/jiangxy__loey/abseil-cpp.gitbranch = lts_2020_02_25
[submodule "third_party/envoy-api"]path = third_party/envoy-api#url = https://github.com/envoyproxy/data-plane-api.giturl = https://gitee.com/jiangxy__loey/envoy-api.git
[submodule "third_party/googleapis"]path = third_party/googleapis#url = https://github.com/googleapis/googleapis.giturl = https://gitee.com/jiangxy__loey/googleapis.git
[submodule "third_party/protoc-gen-validate"]path = third_party/protoc-gen-validate#url = https://github.com/envoyproxy/protoc-gen-validate.giturl = https://gitee.com/jiangxy__loey/protoc-gen-validate.git
[submodule "third_party/udpa"]path = third_party/udpa#url = https://github.com/cncf/udpa.giturl = https://gitee.com/jiangxy__loey/udpa.git
[submodule "third_party/libuv"]path = third_party/libuv#url = https://github.com/libuv/libuv.giturl = https://gitee.com/jiangxy__loey/libuv.git

然后下载:

git submodule update --init

在这里插入图片描述

当然如果如果说你的电脑不能科学上网或者上面的操作报错了,说明电脑网络有问题,可以直接下载这个继续操作:
链接:https://pan.baidu.com/s/1sPFO5jXKBJnbNQwiWCLQEw?pwd=wmak
提取码:wmak

四、安装工具和环境依赖

sudo apt-get install pkg-config
sudo apt-get install autoconf automake libtool make g++ unzip
sudo apt-get install libgflags-dev libgtest-dev
sudo apt-get install clang libc++-dev

五、编译protobuf

进入grpc/third_party/protobuf 目录,然后给 autogen.sh 文件加上执行权限:

chmod +x autogen.sh

因为是在 gitee 下载的文件,所以文本格式为 PC,我们需要将其转化为 unix,否则编译会报错,我们通过借助dos2unix工具转换

  • 下载工具
apt install dos2unix

在这里插入图片描述

  • grpc/third_party/protobuf 目录下对所有文件进行格式转换
dos2unix  *

在这里插入图片描述

此时格式替换完成,我们就可以开始编译 protobuf 了,执行 autogen.sh 脚本即可

./autogen.sh

在这里插入图片描述

假设新建库的输出路径 /usr/local
设置库的输出路径

./configure --prefix=/usr/local

开始编译(可能会编的有点久,看个人机器)

make
make check
sudo make install
sudo ldconfig  # 使得新安装的动态库能被加载protoc --version
显示3.19.4

注意,在这一步可能会遇到找不到gawk 的情况
我们只需要apt安装即可

apt install gawk

编译完成后此时我们进入/home/mangata/grpc_learn/grpc/protobuf,然后输出一下当前的目录结构:

在这里插入图片描述

到这里, protobuf 编译完成,接下来就是编译 grpc

六、编译grpc

我们回到 grpc/ 这个路径,然后执行下面的操作即可完成

mkdir -p cmake/build
cd cmake/build
cmake ../..
make
sudo make install

sudo make install 报错了,那就去 /usr/local/share/man/ 目录将man1 删掉,并且创建一个man1 的文件夹
在这里插入图片描述
在这里插入图片描述

七、测试

进入grpc/examples/cpp/helloworld 目录,然后创建build 文件夹

cd grpc/examples/cpp/helloworld/
mkdir build
cd build/
cmake ..
make

进入 build 文件夹cd build ,然后cmake .. ,最后输入 make

在这里插入图片描述

在这里插入图片描述

启动服务和客户端

# 启动服务端,监听在50051端口
./greeter_server
Server listening on 0.0.0.0:50051
# 启动客户端,服务端返回Hello world
./greeter_client 
Greeter received: Hello world

在这里插入图片描述
看到回应 Hello world 就完成了,接下来就是学习 grpc 的四种模式了,下期再见~

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

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

相关文章

为什么残差连接的网络结构更容易学习?

为什么残差连接的网络结构更容易学习? 【写在前面】 不仅仅在resnet中,在各种网络结构中大家都喜欢使用残差连接的设计,并声称这有利于网络的优化,这是为什么呢?能给出一个有说服力的答案吗? Why the re…

1.数据校验-拦截器-全局异常-json数据处理

目录 1.数据校验-拦截器-全局异常-json数据处理 1. JSR303 2. JSR303中含有的注解 3. spring中使用JSR303进行服务端校验 3.1 导入依赖包 3.2 添加验证规则 3.3执行校验 3.4 错误信息的展示 4. SpringMVC定义Restfull接口 5.1 增加spring配置 5.2 Controller 5.3 格…

Mstsc(远程桌面连接)命令的高级用法

Mstsc远程桌面连接,这个是微软操作系统自带的一个命令,相信很多人都用过,但是如果说这个命令还有高级用法,估计很多人都没有用过,其实这个命令还是很强大的,今天咱们就来说一下mstsc的高级用法Mstsc远程桌面连接,这个是微软操作系统自带的一个命令,相信很多人都用过,但…

20220912--CSP-S模拟4

A. 石子游戏 B. 大鱼吃小鱼 C. 黑客 D. 黑客-续A. 石子游戏 首先了解一个叫做 \(\operatorname{Nim}\) 游戏的玩意 通常的 \(\operatorname{Nim}\) 游戏的定义是这样的: 有若干堆石子,每堆石子的数量都是有限的,合法的移动是“选择一堆石子并拿走若干颗(不能不拿)” 如果轮…

自制操作系统日志——第十二天

自制操作系统日志——第十二天 从今天开始,我们将花费两天的时间来进行计算机中定时器的制作。有了定时器后,才能够为程序和cpu更加便利的进行计时。可能会稍难一些了!!! 做好准备,冲!&#xf…

ConcurrentLinkedQueue解析

概述 ConcurrentLinkedQueue实际对应的是LinkedList,是一个线程安全的无界队列,但LinkedList是一个双向链表,而ConcurrentLinkedQueue是单向链表。ConcurrentLinkedQueue线程安全在于设置head、tail以及next指针时都用的cas操作,而且node里的…

00Android studio安装

目录一.下载Android studio二.安装Android studio三.打开软件一.下载Android studio 官网:https://developer.android.google.cn/studio 下载:由于是国外的网站,国内下载会比较慢 二.安装Android studio 打开: 点击【Next】 点击…

猿创征文|瑞吉外卖——管理端_员工管理

个人名片: 博主:酒徒ᝰ. 专栏:瑞吉外卖 个人简介:沉醉在酒中,借着一股酒劲,去拼搏一个未来。 本篇励志:一本好书,就像高级武功秘籍一样,哪怕只是从里面领悟到个一招半势&…

C# StringBuilder 底层深入原理分析以及使用详解

目录前言什么是StringBuilderStringBuilder的成员StringBuilder增加元素原理StringBuilder扩容原理Capacity:1,元素数量:0Capacity:1,元素数量:1Capacity:2,元素数量:2Ca…

开学季征文|卷生卷死之新学期大学生自救指南!!!

你好,这里是前情提要 正所谓 “ 宁可卷死自己,也要卷死同学 ” ,在这个万物皆卷的时代,“卷”似乎早已与我们变得不可分割血脉相融,有道是卷卷更健康。我也知道卷卷更好,可是天不遂人愿,因为疫情…

Redis_09_Redis集群实现Sentinel哨兵应对高可用

文章目录一、前言二、Sentinel原理2.1 Sentinel原理2.2 Sentinel选主2.3 Sentinel功能小结三、Sentinel实践3.1 Sentinel配置3.2 实践:Sentinel基本使用3.2.1 实践:Sentinel搭建3.2.2 实践:主节点宕机之后的选主过程(Sentinel保证高可用)3.2.…

ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)解决办法

这个解决办法是我根据网上一系列的方法准备突然成功的,所以我想可能是由于本身其不稳定造成的 首先,我在官网上下载了mysql文件,这个网上随便找都能找到怎么下载的 然后打开文件后,发现没有my.ini 所以我就找了一个文档放了进去…

【线性代数】MIT Linear Algebra Lecture 6: Column space and nullspace

Author| Rickyの水果摊 Time | 2022.9.12 Lecture 6: Column space and nullspace Lecture Info Instructor: Prof. Gilbert Strang Course Number: 18.06 Topics: Linear Algebra Official Lecture Resource: Resource Index of Linear Algebra …

HCIP-双机热备

一,双机热备原理 1.1双机热备简介FW部署在网络出口位置时,如果发生故障会影响到整网业务。为提升网络的可靠性,需要部署两台FW并组成双机热备。双机热备需要两台硬件和软件配置均相同的FW。两台FW之间通过一条独立的链路连接,这条链路通常被称之为“心跳线”。两台FW通过心…

美团面试官:高并发、任务执行时间短的业务怎样使用线程池?

前言 无论是互联网大厂还是一些中游公司的面试基本都会问到多线程与并发编程的知识,所以今天小编在这里做了关于这方面知识的一个笔记分享送给即将面试跳槽的程序员朋友们! 首先关于多线程与并发的知识总结了一个思维导图,分享给大家 如果你…

【Pytorch】2022 Pytorch基础入门教程(完整详细版)

一、Pytorch 1.1 简介 Pytorch是torch的python版本,是由Facebook开源的神经网络框架,专门针对 GPU 加速的深度神经网络(DNN)编程。Torch 是一个经典的对多维矩阵数据进行操作的张量(tensor )库&#xff0…

从校园智能门锁预见万物互联的未来

随着物联网、移动互联网、大数据、云计算等信息技术的创新发展,被信息化驱动的教育行业实现了技术深化融合,智慧校园正逐步落地生根、开花结果。校园智能门锁是智慧校园的基础载体,也是实现教育信息化的基础载体。 NO.1校园智能门锁构建一体化…

【CSDN竞赛第五期】“三而竭”采用等比求和公式法的思考

原题题目 一鼓作气再而衰三而竭。 小艺总是喜欢把任务分开做。小艺接到一个任务,任务的总任务量是n。 第一天小艺能完成x份任务,第二天能完成x/k ... ...第t天能完成x/(k^(t-1))。 小艺想知道自己第一天至少完成多少才能完成最后的任务。 公式推导 第一…

[项目管理-25]:高效沟通的利器,结构思考力与树形结构化表达

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址: 目录 前言: 第1章 结构化思考力概述 1.1 非结构化思考力的问题与结构化思路力的好处 1.2 什么是结构化思路力 1.3…

mysql中的mvcc机制

MVCC多版本并发控制 简述MySQL锁 在InnoDB引擎下,按锁的粒度分类,可以分为行锁和表锁。 行锁实际上是作用在索引之上的。当我们的SQL命中了索引,那锁住的就是命中条件内的索引节点(这就是行锁),如果没有命中索引,那锁…