VisualStudio环境编译和使⽤grpc框架
作者:
gRPC 是⼀个⾼性能、通⽤的开源RPC框架,其由 Google 主要⾯向移动应⽤开发并基于HTTP/2 协议标准⽽设计,基于
ProtoBuf(Protocol Buffers) 序列化协议开发,且⽀持java、C++、C#等众多开发语⾔。
本⽂根据csdn博主“”的《gRPC源码编译和使⽤(windows+vs) --史上最详细教程》,结合最新的grpc源码,分享当前版本编译时可能遇到的问题及解决⽅案。
⼀、下载源码
2、grpc代码下载完成后,打开grpc\.gitmodules,根据⽂档中的链接下载对应的三⽅库源码,下载好的源码放在grpc\third_party的各个⽬录下。
注意:当前(2020年8⽉7⽇17:31:05)最新的grpc源码,仅⽀持VS2015及以上版本编译,因此使⽤cm
ake⽣成VS编译⼯程前,需要升级Visual Studio。我电脑上安装的是VS2013,亲测VS2015和VS2013版本不兼容,最后卸载了VS2015和VS2013,重新安装
VS2019,才解决掉VS版本兼容问题。
⼆、部署编译环境
1、Visual Studio:注意grpc源码匹配的Visual Studio版本,如果版本过低,需要先升级VS版本。cmake如何使用
2、CMake:CMake更具grpc源码和编译脚本,⽣成对应的VS项⽬⼯程,⽬前有⽀持UI的CMake版本,下载后直接运⾏即可,也可以下载命令⾏版本。
3、ActiverPer:⽤于编译三⽅库源码。
4、NASM:跨平台汇编器,⽤于编译依赖库
注意:如果这些⼯具下载安装完成,CMake依然报错不到编译环境,需要设置⼀下环境变量,具体⽅案百度即可。
三、⽣成VS项⽬⼯程
1、打开CMake,输⼊grpc源码路径和⽣成⼯程的⽬的路径,点击configure开始配置,配置完成后,点击generate⽣成VS项⽬⼯程。配置过程中,如果失败,根据出错提⽰解决对应的问题, 然后清空⽣成⽬录,重新编译即可。
ps:CMake configure过程中,出现较多的问题⼀般是缺失源码或者缺少编译环境。如果缺失源码,注意看⼀下.gitmodules⽂档中的所有三⽅库是否已全部下载并放到正确的⽬录中;如果缺失编译环境,则安装对应的编译器,并配置环境变量即可。
四、编译源码
1、CMake configure和generate成功后,⽤Visual Studio打开⽣成的VS⼯程⽂件,编译项⽬⼯程。
2、编译过程中部分项⽬可能编译失败,根据error message,做具体的处理即可。
(1)项⽬平台最好选择release x64。
(2)如果编译整个解决⽅案失败,尝试编译失败的那个项⽬,看报什么错,解决这个错误后再重新编。
(3)如果编译crypto项⽬失败,原因是被墙了,连接远端服务器失败,需要通过修改go代理解决。
3、VS编程成功后,在对应的⽬录下会⽣成grpc和grpc++静态链接库,以及三⽅库。
例如protobuf的库:
注意:使⽤CMake⽣成的VS⼯程,项⽬⼯程配置中的头⽂件路径和库⽂件路径是绝对路径,所以如果直接拷贝别⼈已经编译好的⼯程到⾃⼰的⽬录下,如果路径不⼀致,可能会编译失败。所以最好⾃⼰根据源码⽣成⼯程和编译,避免路径不⼀致的问题。
五、测试程序
1、新建VS项⽬⼯程,拷贝:
<grpc源码根⽬录>\grpc\examples\cpp\helloworld\
<grpc源码根⽬录>\grpc\examples\cpp\helloworld\
<grpc源码根⽬录>\grpc\examples\protos\helloworld.proto
<grpc项⽬⼯程⽬录>\third_party\protobuf\
<grpc项⽬⼯程⽬录>\Release\grpc_
到⼯程⽬录下。
拷贝:
<grpc源码根⽬录>\grpc\include\grpc
<grpc源码根⽬录>\grpc\include\grpc++
<grpc源码根⽬录>\grpc\include\grpcpp
<grpc源码根⽬录>\grpc\third_party\protobuf\src\google
到项⽬头⽂件⽬录下。
注意:新建的测试程序项⽬⼯程的字符集需要和grpc⼯程的字符集⼀致,否则加载静态库会出错,设置⽅法:项⽬属性-配置属性-⾼级-字符集-使⽤多字节字符集
2、在⼯程⽬录下,打开cmd,依次执⾏下⾯的命令:
< --grpc_out=. --plugin=protoc-gen-grpc=grpc_ helloworld.proto
< --cpp_out=. helloworld.proto
将⽣成下⾯的4个⽂件:
<
helloworld.pb.h
注意:
(1).proto⽂件不⽀持中⽂,如果⽂件中包含中⽂,运⾏时会报错;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。