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

news2024/11/16 19:26:46

    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) 设置Releae目录,并编译
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 greeting
  rpc 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文件

参考文献

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

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

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

相关文章

肖sir__xftp安装使用__004

xftp 一、定义:Xftp是一款功能强大的FTP传输软件,主要用于文件的上传和下载,支持SFTP和FTP协议。Xftp在Windows系统上设计,但也可在Linux系统上使用。本文将详细介绍Xftp的功能和使用方法 二、Xftp的功能 1.文件传输与管理&#…

递归算法学习——电话号码的字母组成,括号生成,组合

目录 一,电话号码的字母组合 1.题意 2.例子 3.题目接口 4.解题代码和思路 代码: 思路: 二,括号的生成 1.题意 2.例子 3.题目接口 四,解题代码和思路 1.先写代码: 2.思路 三,组合 …

udig下载、安装及汉化,生成geoserver图层样式sld文件

uDig是一款开源免费的桌面地理信息系统框架软件。uDig汉化版主要采用RCP技术构建,内置的多专业的水文工具,拥有复杂专业的分析能力,既可以作为独立程序运行,还可以作为插件使用。 uDig是一个 open source (EPL and BSD) 桌面应用程…

volatile 关键字 与 CPU cache line 的效率问题

分析&回答 Cache Line可以简单的理解为CPU Cache中的最小缓存单位。目前主流的CPU Cache的Cache Line大小都是64Bytes。假设我们有一个512字节的一级缓存,那么按照64B的缓存单位大小来算,这个一级缓存所能存放的缓存个数就是512/64 8个。具体参见下…

微信小程序地图应用总结版

1.应用场景&#xff1a;展示公司位置&#xff0c;并打开第三方app&#xff08;高德&#xff0c;腾讯&#xff09;导航到目标位置。 &#xff08;1&#xff09;展示位置地图 uniapp官网提供了相关组件&#xff0c;uniapp-map组件 具体用法&#xff1a; html结构 <map sty…

文件夹如何隐藏加密?文件夹加密隐藏软件有哪些?

文件夹加密和文件夹隐藏都是保护文件夹数据安全的方法&#xff0c;我们可以将这两者结合&#xff0c;以实现更好的保护。那么&#xff0c;文件夹如何隐藏加密呢&#xff1f; 如何隐藏加密文件夹&#xff1f; 想要隐藏加密文件夹&#xff0c;我们可以通过以下两种方式来实现&am…

【算法竞赛宝典】读文章

【算法竞赛宝典】读文章 题目描述代码展示 题目描述 代码展示 //读文章 #include <iostream> #include <string.h>using namespace std;int main() {int i, j, upp, low, dig, spa, oth;char text[3][80];upp low dig spa oth 0;for (i 0; i < 3; i) {g…

Pyecharts数据可视化(一)

目录 1.Pyecharts简介 2.Pyecharts的常用方法 3.Pyecharts绘制柱状图 3.1 绘制并列柱状图 3.2 绘制水平直方图 1.Pyecharts简介 Pyecharts是一个用于创建交互式图表的Python库。它基于Echarts&#xff0c;一个强大的JavaScript图表库&#xff0c;Pyecharts允许Python开发者…

分享几个靠谱的网络项目,空闲时间就能月收益几千!

近几年来最大的感受就是赚钱越来越难了&#xff0c;对于上班族来说固定的那份工资比较有限&#xff0c;相信很多朋友们都想开拓一些副业&#xff0c;给自己增加一些收入&#xff0c;小编今天给大家推荐几个靠谱的最新项目分享给大家。 第一个&#xff1a;文案编辑 文案编辑是…

详解vue3中ref和reactive用法和区别

vue3中ref和reactive区别 1、前言2、基本用法2.1 ref2.2 reactive 3、ref和reactive定义数组对比3.1 ref定义数组3.1 reactive定义数组 4、ref 和reactive的区别 1、前言 ref和reactive是Vue3中用来实现数据响应式的API&#xff0c;一般情况下&#xff0c;ref定义基本数据类型…

6.(Python数模)游泳接力指派问题

Python解决游泳接力指派问题 该问题也属于一个线性规划问题 源代码 import pulp # 导入 pulp 库 import numpy as np# 主程序 def main():# 问题建模&#xff1a;"""决策变量&#xff1a;x(i,j) 0, 第 i 个人不游第 j 种姿势x(i,j) 1, 第 i 个人游第 …

小疆智控CANOpen转PROFINET网关连接EA180C CANOPEN总线型伺服配置案例

1、首先新建一个工程&#xff0c;在CanOpen转Profinet网关配置软件中添加主站设备&#xff0c;如下图&#xff1b; 2、在CanOpen转Profinet网关设备点击导入EA180C CANOPEN总线型伺服 EDS 文件&#xff0c;右键添加从属设备&#xff1b; 3、设备设置站地址&#xff0c;如图&…

【LeetCode算法系列题解】第46~50题

CONTENTS LeetCode 46. 全排列&#xff08;中等&#xff09;LeetCode 47. 全排列 II&#xff08;中等&#xff09;LeetCode 48. 旋转图像&#xff08;中等&#xff09;LeetCode 49. 字母异位词分组&#xff08;中等&#xff09;LeetCode 50. Pow(x, n)&#xff08;中等&#xf…

【高阶产品策略】设计有效的AB测试

文章目录 1、A/B测试概述2、A/B测试实施过程3、A/B测试中需要注意的地方4、从一个案例中看A/B测试 1、A/B测试概述 2、A/B测试实施过程 3、A/B测试中需要注意的地方 4、从一个案例中看A/B测试

水果库存系统(SSM+Thymeleaf版)

不为失败找理由&#xff0c;只为成功找方法。所有的不甘&#xff0c;因为还心存梦想&#xff0c;所以在你放弃之前&#xff0c;好好拼一把&#xff0c;只怕心老&#xff0c;不怕路长。 文章目录 一、前言二、系统架构与需求分析1、技术栈1.1 后端1.2 前端 2、需求分析 三、设计…

python 深度学习 解决遇到的报错问题4

目录 一、DLL load failed while importing _imaging: 找不到指定的模块 二、Cartopy安装失败 三、simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 四、raise IndexError("single positional indexer is out-of-bounds") 五、T…

Linux系统Ubuntu以非root用户身份操作Docker的方法

本文介绍在Linux操作系统Ubuntu版本中&#xff0c;通过配置&#xff0c;实现以非root用户身份&#xff0c;进行Docker各项操作的具体方法。 在文章Linux系统Ubuntu配置Docker详细流程&#xff08;https://blog.csdn.net/zhebushibiaoshifu/article/details/132612560&#xff0…

一文1800字从0到1使用Python Flask实战构建Web应用

Python Flask是一个轻量级的Web框架&#xff0c;它简单易用、灵活性高&#xff0c;适用于构建各种规模的Web应用。本文将介绍如何使用Python Flask框架来实战构建一个简单的Web应用&#xff0c;并展示其基本功能和特性。 第一部分&#xff1a;搭建开发环境 在开始之前我们需要…

Redis常用命令,你了解哪些呢?

目录 前置工作&#xff1a;先进入Redis客户端 1、Redis最核心的两个命令&#xff1a;get & set set&#xff1a;存键值对 get&#xff1a;根据key&#xff0c;取出value 2、Redis全局命令 2.1、keys ---查询当前服务器上匹配的key 2.1.1. &#xff1f; 匹配任意一个字…

Python VScode 配置

在上一章节中我们已经安装了 Python 的环境&#xff0c;本章节我们将介绍 Python VScode 的配置。 准备工作&#xff1a; 安装 VS Code安装 VS Code Python 扩展安装 Python 3 安装 VS Code VSCode&#xff08;全称&#xff1a;Visual Studio Code&#xff09;是一款由微软…