在Windows10上编译grpc工程,得到protoc.exe和grpc_cpp_plugin.exe

    grpc是google于2015年发布的一款跨进程、跨语言、开源的RPC(远程过程调用)技术。使用C/S模式,在客户端、服务端共享一个protobuf二进制数据。在点对点通信、微服务、跨语言通信等领域应用很广,下面介绍grpc在windows10上编译,这里以编译grpc v1.42.0版本为例,进行说明,如图(1)所示:

https://github.com/grpc/grpc/tree/v1.42.0/
图(1) 下载grpc v1.42.0版本

1 安装编译工具

1.1 安装VS2019

    下载VS2019,官网地址: https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/
    个人地址: https://pan.baidu.com/s/1VaQC5_CprbTtp8mbPWCaBA
提取码:uo1b
    双击该安装包,选中"使用C++的桌面开发",然后一路默认,直到安装完成。

图(2) 下载VS2019

图(3) 选中“使用C++的桌面开发”即可

1.2 安装git

    git官网: ttps://git-scm.com/
    git的安装方法进,参考这篇文件: git详细安装教程

1.3 安装cmake

    cmake官网: https://cmake.org/download/
    cmake的安装方法,参考这篇文件: cmake安装

1.4 安装nasm

    nasm官网: https://www.nasm.us/
    nasm的安装方法,参考这篇文件: nasm安装

1.5 安装ninja

    ninja官网: https://ninja-build.org/
    ninja的安装方法,参考这篇文件: ninja安装

2 配置工程

2.1 Git配置ssh

    git配置ssh请参考这篇文章: https://www.cnblogs.com/yiven/p/8465054.html

2.2 修改zlib的版本号

    将grpc\third_party\zlib\CMakeLists.txt里的第一行cmake版本号,改成如下:

cmake_minimum_required(VERSION 2.8...3.22)

2.3 下载第三方依赖包

    在https://github.com/grpc/grpc/tree/v1.42.0/third_party链接里,

https://github.com/grpc/grpc/tree/v1.42.0/third_party

    下载编译所需的第三方依赖包,具体如下:

abseil-cpp
benchmark
bloaty
boringssl
c-ares
data-plane-api
googleapis
googletest
libuv
opencensus-proto
opentelemetry-proto
protobuf
protoc-gen-validate
re2
xds
zlib

    将这些第三方依赖包下载后,解压,把它们放到grpc\third_party的同名目录里。

图(4) 手动下载第三方依赖包

    或者,在这个链接里下载: https://pan.baidu.com/s/1fplVSH39XML3pRnshFGnVA 提取码:dair

3 使用cmake编译grpc

    打开Git ,克隆grpc工程,然后,设置第三方的依赖库,再使用make命令编译。

## 1) 克隆grpc工程
git clone --recurse-submodules -b v1.42.0 https://gitee.com/mirrors/grpc## 2) 进入grpc工程
cd grpc## 3) 同步第三方模块
git submodule sync## 4)使用VS2019构建静态库
cmake -G "Visual Studio 16 2019" -DgRPC_INSTALL=ON -DgRPC_BUILD_TESTS=OFF ./CMakeLists.txt## 5) 设置Debug目录,并编译
cmake --build . --config Debug## 6) 设置Release目录,并编译
cmake --build . --config Release

4 生成protobuf文件

4.1 提取protoc

    编译成功后,在grpc\third_party\protobuf\Release目录,会看到protoc.exe、libprotoc.lib等文件;
    在grpc\Release\grpc_cpp_plugin.exe、grpc_csharp_plugin.exe,将其拷贝出来,放到D:\protobuf,如图(5)所示:

图(5) 拷贝protoc.exe、grpc_cpp_plugin.exe、grpc_csharp_plugin.exe

4.2 创建一个helloworld.proto文件

    helloworld.proto的内容如下:
    //helloworld.proto

syntax = "proto3";option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";
option objc_class_prefix = "HLW";package helloworld;// The greeting service definition.
service Greeter {// Sends a greetingrpc SayHello (HelloRequest) returns (HelloReply) {}
}// The request message containing the user's name.
message HelloRequest {string name = 1;
}// The response message containing the greetings
message HelloReply {string message = 1;
}

4.3 生成pb文件

    按Win+R快捷键,输入:cmd,依次输入如下命令:

## 1)切换到D盘
D:## 2)进入protobuf目录
D:\protobuf## 3)执行C++方式的protoc命令
protoc.exe -I=.\ --cpp_out=.\ --grpc_out=.\ --plugin=protoc-gen-grpc=".\grpc_cpp_plugin.exe" helloworld.proto## 4) 执行Csharp方式的protoc命令
protoc.exe -I=.\ --csharp_out=.\ --grpc_out=.\ --plugin=protoc-gen-grpc=".\grpc_csharp_plugin.exe" helloworld.proto

    本例采用C++方式的protoc命令,如图(6)所示:

protoc.exe -I=.\ --cpp_out=.\ --grpc_out=.\ --plugin=protoc-gen-grpc=".\grpc_cpp_plugin.exe" helloworld.proto
图(6) 按C++方式,生成pb文件

    或按C# (CSharp)方式,生成pb文件,如图(7)所示:

图(7)按C#(CSharp)方式,生成pb文件

5 C++和C#版本的protoc

5.1 C++、C#共同的protoc

    protoc是根据插件grpc_XXX_plugin.exe和命令 --XXX_out 参数,来生成不同语言的pb文件的。protoc.exe既可以共用,也可以单独分开。这里介绍共用的protoc,如图(8)所示表示不同的插件:

图(8) grpc_XXX_plugin.exe表示不同的语言插件

    grpc通过protoc文件,进行数据传递。这里给出C++和C#版本protoc链接: https://pan.baidu.com/s/1RjUeI-89M8FkYuXDCMsMFg 提取码:s56c

    对于其他语言版本的protoc,比如Java、Note.js、Ruby、Python等版本的protoc,需要按照本文第1~4节来编译grpc源码,在grpc\Release和grpc\thitd_party\protobuf\Release目录,就可以得到protoc。

5.2 C#单独的protoc

    C#版本的protoc,在NuGet.org里有官方版本下载,它放在Grpc.Tools工具里,如图(9)所示:

https://www.nuget.org/packages/Grpc.Tools/2.57.0#show-readme-container
图(9) 下载Grpc.Tools工具,该包是C#版本的protoc包

    下载Grpc.Tools工具,得到以*.nupkg结尾的压缩包,这个*.nupkg后缀名改成*.rar,如图(10)所示:

图(10) 下载Grpc.Tools,并修改后缀名

    然后将这rar文件解压,在grpc.tools\tools\windows_x64目录下,即可看到protoc.exe、gprc_csharp_plugin.exe文件,这2个文件用于生成C#版本grpc对应的pb文件,如图(11)所示:

图(11) 在grpc.tools\tools\windows_x64里

参考文献

【1】 cmake编译grpc v1.42.0
【2】 grpc C++笔记

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

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

相关文章

aac音频格式怎么转mp3?这种转换方法很简单

AAC格式和MP3格式都是数字音频格式,但它们使用不同的音频压缩算法。虽然AAC格式在音质和文件大小方面表现出色,但是不是所有的设备都支持该格式。相比之下,MP3格式的兼容性更好,可以在各种设备和操作系统上播放,因此转…

7.(Python数模)消防站的选址问题

Python解决消防站的选址问题 原文参考该博文 问题描述 源代码 import pulp # 导入 pulp 库# 主程序 def main():# 问题建模:"""决策变量:x(j) 0, 不选择第 j 个消防站x(j) 1, 选择第 j 个消防站, j1,8目标函数:min fx …

Linux 基础篇

很长时间,因为一些事情,没有更新我的文章这让我很惭愧,于是我将打算在今天更新下自己的文章,我发现一些事情,计算机并不是很难学到可以工作的水平,关键在于是否可以坚持下来,有很多时候我并不是…

人工智能论文通用创新点(一)——ACMIX 卷积与注意力融合、GCnet(全局特征融合)、Coordinate_attention、SPD(可替换下采样)

1.ACMIX 卷积与注意力融合 论文地址:https://arxiv.org/pdf/2111.14556.pdf 为了实现卷积与注意力的融合,我们让特征图经过两个路径,一个路径经过卷积,另外一个路径经过Transformer,但是,现在有一个问题,卷积路径比较快,Transformer比较慢。因此,我们让Q,K,V通过1*1的…

安装kali虚拟机镜像的坑

1.0 安装虚拟机镜像成功之后,只有光标,没有界面 在VMware上安装kali linux环境时,根据提示操作完成后,开启虚拟机,屏幕黑屏,左上角有一个光标在闪,一直开不了机。 出现问题的原因,…

说说TIME_WAIT和CLOSE_WAIT区别

分析&回答 TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接&#xf…

云备份——实用类工具实现

一,文件实用类设计实现 不管是客户端还是服务端,文件的传输备份都涉及到文件的读写,包括数据管理信息的持久化也是如此,因此首先设计封装文件操作类,这个类封装完毕之后,则在任意模块中对文件进行操作时都将…

【python爬虫案例】用python爬豆瓣音乐TOP250排行榜!

文章目录 一、爬虫对象-豆瓣音乐TOP250二、python爬虫代码讲解三、同步视频四、获取完整源码 一、爬虫对象-豆瓣音乐TOP250 您好,我是 马哥python说 ,一名10年程序猿。 今天我们分享一期python爬虫案例讲解。爬取对象是,豆瓣音乐TOP250排行…

基于aarch64分析kernel源码 四:printk 内核打印

一、参考 Message logging with printk — The Linux Kernel documentation 如何获得正确的printk格式占位符 — The Linux Kernel documentation 使用printk记录消息 — The Linux Kernel documentation printk 内核打印 – 人人都懂物联网 (getiot.tech) 内核printk原理…

五金轴尺寸机器视觉测量软硬件方案--康耐德智能

检测内容: 五金轴尺寸机器视觉测量 检测要求: 精度0.015mm,速度180~240个/分钟 视觉可行性分析: 对样品进行了光学实验,并进行图像处理,原则上可以使用机器视觉系统进行测试测量。 结果: 对…

Python小知识 - 1. Python装饰器(decorator)

Python装饰器(decorator) Python装饰器是一个很有用的功能,它可以让我们在不修改原有代码的情况下,为已有的函数或类添加额外的功能。 常见的使用场景有: a. 函数缓存:对于一些计算量较大的函数&#xff0c…

Samba服务器

目录 一、什么是Samba? 二、Samba进程 三、Samba主要功能 四、Samba工作流程 五、Samba安全级别 六、Sam主配置文件/etc/samba/smb.conf 七、Samba服务配置案例 一、什么是Samba? Samba可以让linux计算机和windows计算机之间实现文件和打印机资源共享的一…

Homebrew下载安装及使用教程

Homebrew是什么? 简单来说,就是用命令行的形式去管理mac系统的包或软件。 安装命令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"国内请使用镜像源进行下载 执行上述命令后会要求输入…

【设计模式】装饰者模式

5.3 装饰者模式 5.3.1 概述 我们先来看一个快餐店的例子。 快餐店有炒面、炒饭这些快餐,可以额外附加鸡蛋、火腿、培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样,那么计算总价就会显得比较麻烦。 使用继承的…

vue3 ref reactive响应式数据 赋值的问题

文章目录 vue3 ref reactive响应式数据 赋值的问题场景1:将响应式数据赋值请求后的数据错误示范:直接赋值正确写法 场景2:响应式数据解构之后失去响应式原因分析解决办法 toRefs/toRef方法创建ref引用对象 vue3 ref reactive响应式数据 赋值的问题 doing…

[PyTorch][chapter 53][Auto Encoder 实战]

前言: 结合手写数字识别的例子,实现以下AutoEncoder ae.py: 实现autoEncoder 网络 main.py: 加载手写数字数据集,以及训练,验证,测试网络。 左图:原图像 右图:重构图像 ----main----- 每轮训…

bazel远程缓存(Remote Cache)

原理 您可以将服务器设置为构建输出(即这些操作输出)的远程缓存。这些输出由输出文件名列表及其内容的哈希值组成。借助远程缓存,您可以重复使用其他用户的 build 中的构建输出,而不是在本地构建每个新输出。 增量构建极大的提升…

开启EMQX的SSL模式及SSL证书生成流程

生成证书 首先:需要安装Openssl 以下是openssl命令 生成CA证书 1.openssl genrsa -out rootCA.key 2048 2.openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -subj "/CCN/STShandong/Ljinan/Oyunding/OUplatform/CNrootCA" -out ro…

unity 发布apk,在应用内下载安装apk(用于更大大版本)

*注意事项: 1,andriod 7.0 和 android 8.0是安卓系统的分水岭,需要分开来去实现相关内容2,注意自己的包名,在设置一些共享文件的时候需要放自己的包名3,以下是直接用arr包放入unity中直接使用的,不需要导入…

尚硅谷SpringMVC (5-8)

五、域对象共享数据 1、使用ServletAPI向request域对象共享数据 首页&#xff1a; Controller public class TestController {RequestMapping("/")public String index(){return "index";} } <!DOCTYPE html> <html lang"en" xmln…