基于C++环境的gRPC安装配置:vcpkg+CMake+VS2022

基于C++环境的gRPC安装配置

vcpkg+CMake+VS2022

文章目录

  • 基于C++环境的gRPC安装配置
  • vcpkg+CMake+VS2022
  • 前言
  • 一、安装vcpkg
  • 二、安装gRPC与protobuf
  • 三、proto生成源文件
  • 四、CMake构建项目
  • 五、Visual Studio编译项目


前言

gRPC 是 Google 提供的一个 RPC 框架,用于在网络上实现多个应用程序之间的通信。gRPC的优点是支持多种语言,因此可以轻松使用C++应用程序与Go或Python应用程序进行通信。
尽管CSDN、知乎有很多讲解gRPC在C++环境安装的文章,其中最常见的是使用pip、golang、nasm、yasm、perl等等工具进行安装。但大部分并没有分享安装过程可能遇到的问题,而且往往会因为某个工具没有安装,导致CMake编译的时候遇到编译报错;pip在下载gRPC依赖库的过程也会遇到问题,最后只能自己对着配置文件一个一个在github下载;即便克服了上述问题,在CMake成功编译后,运行编译后VS2022的sln文件,也可能出现由于依赖库产生的各种编译错误。综上所述,基于pip、golang、nasm、yasm、perl等等工具进行gRPC安装对新手是极度不友好的。
本文采用另外一种方式,利用vspkg包管理器去配置gRPC和protobuf库,鉴于vcpkg本身的安装极为简单,会为gRPC的安装带来便利。本文使用的主要工具为vcpkg包管理器CMake编译器VS2022编译环境
下面提供一些可参考的文章,本文的思想源于知乎这篇文章,当然文章有一些可能遇到的问题,本文已规避。
知乎文章:在windows上使用C++ gRPC
OD’ed:Working with gRPC/C++ in Windows


一、安装vcpkg

vcpkg包管理器可以为我们自动安装C++源代码的项目;此外,包管理器可以解决库之间的兼容问题,这是个人很难处理的。我们将使用微软的跨平台开源包管理器,该包管理器的安装步骤非常简单,基本不会遇到障碍。
vspkg安装链接:https://github.com/Microsoft/vcpkg
在网站下载vcpkg后,还需要一步编译操作,生成vcpkg.exe文件。命令行转到vcpkg安装目录,并执行以下命令:

.\vcpkg\bootstrap-vcpkg.bat

安装后,必须将vcpkg的可执行文件的路径添加到环境变量的PATH变量中,例如,如下所示:
基于C++环境的gRPC安装配置:vcpkg+CMake+VS2022_第1张图片


二、安装gRPC与protobuf

安装gRPC
使用vcpkg 安装 gRPC,在Windows启动控制台并执行以下命令:

vcpkg install grpc:x64-windows

如果没有添加环境变量,也可以考虑先转到vcpkg安装目录:

cd D:\vcpkg

安装protobuf
使用vcpkg 安装 protobuf,在Windows启动控制台并执行以下命令:

vcpkg install protobuf protobuf:x64-windows

可能存在的问题:
安装过程可能由于域名或者服务器问题,导致传输超时,如果情况允许,可以考虑,以方便vcpkg自动安装gRPC与protobuf的顺便完成。


三、proto生成源文件

对于 C++语言,编译器会根据定义的.proto 文件编译生成一个.h 头文件和一个.cc 源码实现文件。首先我们需要编写一个 proto 文件,定义我们程序中需要处理的结构化数据,在 protobuf 的术语中,结构化数据被称为 Message。proto 文件非常类似 java 或者 C 语言的数据定义。以 gRPC 的github仓库的helloword.proto为例,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;
}

为方便编译,我们建立三个文件夹和一个CMakeLists.txt文件,如下图所示:

基于C++环境的gRPC安装配置:vcpkg+CMake+VS2022_第2张图片
protoc.exe的路径加到环境变量,对应路径为D:\vcpkg\packages\protobuf_x64-windows\tools\protobuf。
github上下载helloworld.proto并放入proto文件路径,在Windows启动控制台并执行以下命令:

cd D:\vcpkg\grpc_example\proto
protoc --proto_path=. --cpp_out=. helloworld.proto
protoc --proto_path=. --grpc_out=. --plugin=protoc-gen-grpc="D:\vcpkg\packages\grpc_x64-windows\tools\grpc\grpc_cpp_plugin.exe" helloworld.proto

可能要修改的地方:
cd D:\vcpkg\grpc_example\proto修改到自己对应的proto路径;
helloworld.proto修改为相应的proto文件名称;
grpc_cpp_plugin.exe需要确认一下,在目前文件是否能找到。

运行生成相应的接口和服务的.h和.cc文件,运行后的结果如下所示:
基于C++环境的gRPC安装配置:vcpkg+CMake+VS2022_第3张图片


四、CMake构建项目

安装CMake
CMake下载地址:https://cmake.org/download/ ;下载安装后加入环境变量。
现在我们已经从 proto 文件生成了所需的文件,让我们添加服务器、客户端代码并创建一个项目。
在github上下载server.cc和client.cc文件,并且放入上文的src文件夹路径。
注意事项: 网上下载的server和client文件都存在路径问题,建议修改为相对路径

#include "../proto/helloworld.grpc.pb.h"

编写CMakeLists.txt:

cmake_minimum_required( VERSION 3.1 )
project( grpc_example )
find_package(gRPC CONFIG REQUIRED)
find_package( Protobuf REQUIRED )
add_executable( server src/server.cpp proto/helloworld.grpc.pb.cc proto/helloworld.pb.cc)
add_executable( client src/client.cpp proto/helloworld.grpc.pb.cc proto/helloworld.pb.cc)
target_link_libraries( server PRIVATE gRPC::grpc++ gRPC::grpc++_reflection gRPC::gpr gRPC::grpc gRPC::grpc++ protobuf::libprotoc protobuf::libprotobuf protobuf::libprotobuf-lite )
target_link_libraries( client PRIVATE gRPC::grpc++ gRPC::grpc++_reflection gRPC::gpr gRPC::grpc gRPC::grpc++ protobuf::libprotoc protobuf::libprotobuf protobuf::libprotobuf-lite )

生成Visual Studio解决方案并编译:
转入build文件夹路径,在Windows启动控制台并执行以下命令:

cd D:\vcpkg\grpc_example\build
cmake -G "Visual Studio 17 2022" ../ -DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake

注意事项:
注意自己对应的Visual Studio的版本号;
注意在目标路径能否找到vcpkg.cmake文件。


五、Visual Studio编译项目

创建好项目之后,我们在build路径下进行编译:

cmake --build .

在Debug文件夹下,找到client.exe与server.exe两个可执行文件。
在两个不同的PowerShell下,输入如下命令:
打开server进程

cd D:\vcpkg\grpc_example\build\Debug
./server

基于C++环境的gRPC安装配置:vcpkg+CMake+VS2022_第4张图片

打开client进程

cd D:\vcpkg\grpc_example\build\Debug
./client

基于C++环境的gRPC安装配置:vcpkg+CMake+VS2022_第5张图片


你可能感兴趣的:(gRPC,rpc,c++,visual,studio)