Windows+VS2017使用gRPC
gRPC官方Windows安装说明:
- Install Visual Studio 2015 or 2017 (Visual C++ compiler will be used).
- Install Git.
- Install CMake.
- Install Active State Perl (
choco install activeperl) - required by boringssl - Install Go (
choco install golang) - required by boringssl - Install yasm and add it to
PATH(choco install yasm) - required by boringssl - (Optional) Install Ninja (
choco install ninja)
在Windows上源码编译安装gRPC还是很麻烦的需要MSVC编译器、git、cmake、Perl、go、yasm、Ninja等工具,一些工具的安装可以使用choco(Windows上的包管理工具)来安装。
准备环境
https://git-scm.com/上下载git,当前版本2.23.0。
https://cmake.org/download/上下载cmake,下载cmake-3.15.3-win64-x64.zip,解压后方式何时位置,将cmake工具所在bin目录加入到系统环境变量Path。

安装Perl、go、yasm等

使用choco安装activeperl在我的电脑上很慢,慢的很,直接在官网下载又需要注册登陆用户,也很麻烦,最后直接在第三方网站下载,直接来安装!



下载gRPC源码
新建一个文件夹,命名为grpc_plugs,右击空白处选择Git Bash Here
git clone https://github.com/grpc/grpc.git
cd grpc 进入grpc文件夹,checkout当前较新版本
git checkout v1.23.0
查看当前版本
git branch -v
下载依赖
git submodule update --init
执行操作需要联网下来,请耐心等待…
下载完毕后,找到并打开文件./grpc/third_party/zlib/gzguts.h找到
#ifdef _WIN32
#inlcude <stddef.h>
#endif
改为
#ifdef _WIN32
#include <stddef.h>
#pragma warning(disable:4996)
#endif
屏蔽一些警告,感觉没啥实际作用,只是照着做而已。
VS2017 编译gRPC源码
mkdir .build
cd .build
cmake –version
cmake .. -G "Visual Studio 15 2017 Win64" -DCMAKE_BUILD_TYPE=Release
配置makefile,过程比较长,期间没有出现error啥的就没啥问题,会生成grpc.sln。
cmake --build .
上述命令执行VS2017编译操作,和直接打开grpc.sln执行编译一样的效果。
耐心等待编译完成…
编译完成后生成gRPC以及第三方依赖库的lib静态库文件,见下图所示:

HelloWorld
gRPC自带的C++ HelloWorld 例子位于.\grpc\examples\cpp\helloworld
在VS2017中新建空的C++工程gRPCTest
将helloworld.proto拷贝到工程目录下
将生成的protoc.exe拷贝到工程目录下
工程目录下运行cmd执行protoc编译命令生成生成源代码文件helloworld.pb.h,helloworld.pb.cpp,helloworld.grpc.pb.h,helloworld.grpc.pb.cpp。
protoc -I="./protos" --grpc_out="./protos" --plugin=protoc-gen-grpc=“E:\LearningOpensourceLib\gRPC\grpc_plugs\grpc\.build\Debug\grpc_cpp_plugin.exe " "./protos\hw.proto"
protoc -I="./protos" --cpp_out="./protos" "./protos\hw.proto"
拷贝grpc_cpp_plugin.exe,greeter_client.cc,greeter_server.cc至工程目录下
将文件都添加至工程中去,最终的工程结构如下:

选择Debug – x64构建配置

配置include目录以及lib目录和lib导入:我这里直接添加的绝对路径



需要配置预处理器定义_WIN32_WINNT=0x0A00,否则会报“Please compile grpc with _WIN32_WINNT of at least 0x600 (aka Windows Vista)”的错误。

客户端代码新增std::cin.get()避免窗口一闪而退:

服务端代码:

编译服务端时,请屏蔽掉客户端的main函数代码
编译客户端时,请屏蔽掉服务端的main函数代码
生成exe文件改名,并将zlibd.dll放在一起

分别运行grpc-server.exe和grpc-client.exe

Windows+VS2017使用gRPC的更多相关文章
- Windows+Qt使用gRPC
上篇文章<Windows+VS2017使用gRPC>编译出了Windows下可用的gRPC静态lib库文件,在此基础上要想在Qt上使用,需要使用MSVC2017 64bit构建组件进行构建 ...
- log4cxx日志库在Windows+VS2017上的编译使用
项目中用到了log4cxx,但是Debug版本运行时老是提示找不到Properities::setProperty?怀疑是提供的库有问题,所以尝试源码来重新编译一下.log4cxx官方主页:https ...
- windows vs2017环境下编译webkit
源码地址:https://github.com/BlzFans/wke 先看官方的说明: Web和Flash的嵌入式3D游戏,基于WebKit 建筑工作单元 VS2005: 1安装Visual Stu ...
- Windows VS2017 编译 libssh2 1.7.0(执行命令、文件上传、下载)
下载安装 OpenSSL 要编译 libssh2,必须先编译好 OpenSSL 的静态库,直接从 http://slproweb.com/products/Win32OpenSSL.html 下载已经 ...
- windows vs2017环境下编译webkit 2
WebKit在Windows上 内容 安装开发工具 设置Git存储库 设置支持工具 构建WebKit 安装Cygwin(可选) 得到一个崩溃日志 本指南提供了用于构建WebKit的指令在Windows ...
- windows+vs2017+C语言 引入mysql.h对MYSQL数据库的操作
mysql.h文件用作VS开发用,用来连接数据库.没有mysql.h文件,就无法调用mysql的东西 也无法用C语言对MYSQL操作. 一般安装了mysql之后,这个文件就在mysql目录的inclu ...
- 尝试在iOS上使用gRPC
简介 gRPC,google的远程过程调用框架,传输协议使用 HTTP2, 序列化协议使用 protobuf.gRPC 使用 HTTP2 传输协议传输 protobuf 序列化的二进制数据,有极高的效 ...
- 谷歌发布的首款基于HTTP/2和protobuf的RPC框架:GRPC
Google 刚刚开源了grpc, 一个基于HTTP2 和 Protobuf 的高性能.开源.通用的RPC框架.Protobuf 本身虽然提供了RPC 的定义语法,但是一直以来,Google 只开 ...
- protoc 命令参数
protoc 命令的获得 源码在 https://github.com/google/protobuf , 如果不想自己编译获得最新版本,则可以下载官方编译好的各个平台的,下载地址:https://g ...
随机推荐
- 初识V4l2(二)-------浅析video_register_device
在V4l2初识(一)中,我们已经知道当插上一个摄像头的时候,在uvc_driver.c中最终会调用函数video_register_device函数.接下来我们就简要分析这个函数做了哪些事情,揭开其神 ...
- Eclipse IDE for java EE Developers下载和安装
1.登录 http://www.eclipse.org/home/index.php ,下载Eclipse IDE for java EE Developers 2.解压缩压缩包到任意路径(推荐:G: ...
- LG2766 最长不下降子序列问题 最大流 网络流24题
问题描述 LG2766 题解 \(\mathrm{Subtask 1}\) 一个求最长不下降子序列的问题,发现\(n \le 500\),直接\(O(n^2)\)暴力DP即可. \(\mathrm{S ...
- koa2中的ctx是什么?
为了试图搞明白,用console.log将它输出 const Koa = require('koa'); const app = new Koa(); app.use(ctx => { ctx. ...
- 【java】获取昨天/今天/明天日期
昨天: SimpleDateFormat sdf=new SimpleDateFormat("yyyMMdd"); Calendar calendar = new Gregoria ...
- control+shift + o热键冲突?????
不知道有没有宝贝跟我遇到一样的问题 就是 control +shift+o 热键冲突了 进过我的严密调查. 这是因为你用的是A卡. 只要你把A卡换成N卡就可以了, 但是因为我太贫穷了,只能 ...
- 在树莓派上配置MariaDB
在树莓派上配置MariaDB 前言 MariaDB是由原本开发MySQL的一些原始开发者领导,他们担心Oracle收购MySQL后会有一些隐患.MariaDB与MySQL保持这高度兼容性,并使用了一个 ...
- A1041 Be Unique (20 分)
一.技术总结 这题在思考的时候遇见了,不知道怎么处理输入顺序问题,虽然有记录每个的次数,事后再反过来需要出现一次的且在第一次出现, 这时我们其实可以使用另一个数组用来存储输入顺序的字符,然后再用另一个 ...
- MySQL实战45讲学习笔记:第三十讲
一.复习一下加锁规则 在第20和21篇文章中,我和你介绍了 InnoDB 的间隙锁.next-key lock,以及加锁规则.在这两篇文章的评论区,出现了很多高质量的留言.我觉得通过分析这些问题,可以 ...
- [LeetCode] 711. Number of Distinct Islands II 不同岛屿的个数之二
Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...