• 在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
    图(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)
    
    • 1

    2.3 下载第三方依赖包

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

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

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

    abseil-cpp
    benchmark
    bloaty
    boringssl
    c-ares
    data-plane-api
    googleapis
    googletest
    libuv
    opencensus-proto
    opentelemetry-proto
    protobuf
    protoc-gen-validate
    re2
    xds
    zlib
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

        将这些第三方依赖包下载后,解压,把它们放到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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

    protoc.exe -I=.\ --cpp_out=.\ --grpc_out=.\ --plugin=protoc-gen-grpc=".\grpc_cpp_plugin.exe" helloworld.proto
    
    • 1
    图(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
    
    • 1
    图(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++笔记

  • 相关阅读:
    FPGA之旅设计99例之第三例-----UART串口通信
    10.20记录纪要
    Python制作爱心跳动代码,这就是程序员的烂漫吗
    【RCNN系列】RCNN论文总结
    docker swam 集群实现负载均衡
    颜色特征和sift算法结合的指示类交通标志识别
    Java笔记(一):volatile、synchronized关键字
    和鲸技术!国家气象信息中心人工智能气象应用基础技术平台上线
    期待重磅升级的梅李大梦想城亲子游乐园!第三代黄桥大梦想城先让你一饱眼福!
    c#设计模式-创建型模式 之 建造者模式
  • 原文地址:https://blog.csdn.net/sanqima/article/details/132636313