C++使用Grpc库
开发环境
- Windwos10操作系统
- Visual Studio2022 Professional
缘由
某项目需求,需要给客户提供c++的grpc使用demo,且要用MFC开发前端界面。在整个过程中,除了MFC使用了一个未注册的空间导致界面无法启动(无法进入OnInitDialog函数)外,大部分问题集中在grpc的编译。
实现方法
- CMake自行编译源码
如果时间充足,可以自行去官网下载grpc源码,按照readme的提示一步步进行编译,但是过程中较长,且中途还涉及一些第三方库的编译。对该方法感兴趣的小伙伴可以查看链接:在Windows10上编译grpc工程,得到protoc.exe和grpc_cpp_plugin.exe
- 使用vcpkg
由于项目时间需要我放弃了这种方式,转而使用vcpkg工具直接从微软下载编译好的grpc库,这个弊端是这部分是微软官方编译的,可能不是最新的grpc源码编译的结果。
按照 在Windows10上编译grpc工程,得到protoc.exe和grpc_cpp_plugin.exe 提及的方法下载完git工具且把grpc源码库拉到本地后,打开最外层目录的readme,按照指引打开和c++相关的指导(shift + 鼠标左键),如下图:
打开另一份readme菜单,按照指引找到文档下部的vcpkg方法,如下图:
下载完成后,查看vcpkg目录 installed ,如下图:
进入目录 installed\x64-windows, 里面有对应的include、lib,我在自己的工程里添加了include和lib文件夹。建议使用静态库。同时要将tools文件夹添加到自己的vs工程根目录下 $(SolutionDir)
。
进行完上述步骤之后,紧接着就是要编译对应的proto文件,注意:如果proto中有service,那么编译指令里需要使用–grpc_out指令,同时指定plugin。这部分花了我一些时间,主因为是要提供demo,因此需要将proto的编译指令放到vs中,方法如下:
在vs solution tab页中右键proto文件,编译工具选择为customized build tool(自定义工具),如下图所示:
接着配置自定义工具,如下图:
可以指定编译后的文件名字,也可以不指定,编译指令如下:
$(SolutionDir)tools\protoc.exe -I=$(SolutionDir)include --plugin=protoc-gen-grpc=$(SolutionDir)tools\grpc_cpp_plugin.exe --grpc_out=. --cpp_out=. xx.proto
。
但我的建议是自己开发的话,可以直接在tools文件夹中通过cmd命令行执行编译指令,指令如下:
>>cd tools
>>protoc.exe -I=. --plugin=protoc-gen-grpc=grpc_cpp_plugin.exe --grpc_out=. --cpp_out=. xx.proto
注意:如果你的proto文件import了其他的proto,最直接的方式,是把对应的proto文件和你的proto文件放在同一个目录下,或者用-I指令指定目录位置,如 -I=. -I="import proto path"
否则可能会提示找不到对应的引入文件,所谓的引入文件,即在你的proto中import了其他ptoro文件,如下:
import "google/protobuf/empty.proto";
这就要求你的protoc目录下有目录goole->protobuf->empty.proto,注意前缀很重要。
执行完成后,你本地就应该生成了grpc.h, grpc.cc, pb.h, pb.cc文件
接着后面可以根据grpc源码文件夹下的example文件夹里的方式去实现grpc服务端和客户端,此处不再赘述。