参考链接:https://blog.csdn.net/weixin_28927079/article/details/97262243

作者:melon-gaga

gRPC 是一个高性能、通用的开源RPC框架,其由 Google 主要面向移动应用开发并基于HTTP/2 协议标准而设计,基于 ProtoBuf(Protocol Buffers) 序列化协议开发,且支持java、C++、C#等众多开发语言。

本文根据csdn博主“melon-gaga”的《gRPC源码编译和使用(windows+vs) --史上最详细教程》,结合最新的grpc源码,分享当前版本编译时可能遇到的问题及解决方案。

一、下载源码

1、从github拉去grpc源码,可以通过浏览器访问https://github.com/grpc/grpc,直接下载最新的代码,也可以通过git工具拉取最新代码https://github.com/grpc/grpc.git。

2、grpc代码下载完成后,打开grpc\.gitmodules,根据文档中的链接下载对应的三方库源码,下载好的源码放在grpc\third_party的各个目录下。

关于提升git的下载速度,可以参考https://blog.csdn.net/weixin_44821644/article/details/107574297,使用giclone.com提供的国内镜像提速,如果直接从github pull代码,部分三方库可能由于网络问题无法下载成功。

注意:当前(2020年8月7日17:31:05)最新的grpc源码,仅支持VS2015及以上版本编译,因此使用cmake生成VS编译工程前,需要升级Visual Studio。我电脑上安装的是VS2013,亲测VS2015和VS2013版本不兼容,最后卸载了VS2015和VS2013,重新安装VS2019,才解决掉VS版本兼容问题。

二、部署编译环境

1、Visual Studio:注意grpc源码匹配的Visual Studio版本,如果版本过低,需要先升级VS版本。

2、CMake:CMake更具grpc源码和编译脚本,生成对应的VS项目工程,目前有支持UI的CMake版本,下载后直接运行即可,也可以下载命令行版本。

3、ActiverPer:用于编译三方库源码。

4、NASM:跨平台汇编器,用于编译依赖库

5、golang:用于编译依赖库,下载链接:https://golang.google.cn/dl/

注意:如果这些工具下载安装完成,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项目失败,原因是golang.org被墙了,连接远端服务器失败,需要通过修改go代理解决。

参考链接:https://goproxy.io

3、VS编程成功后,在对应的目录下会生成grpc和grpc++静态链接库,以及三方库。

例如protobuf的库:

注意:使用CMake生成的VS工程,项目工程配置中的头文件路径和库文件路径是绝对路径,所以如果直接拷贝别人已经编译好的工程到自己的目录下,如果路径不一致,可能会编译失败。所以最好自己根据源码生成工程和编译,避免路径不一致的问题。

五、测试程序

1、新建VS项目工程,拷贝:

<grpc源码根目录>\grpc\examples\cpp\helloworld\greeter_client.cc

<grpc源码根目录>\grpc\examples\cpp\helloworld\greeter_server.cc

<grpc源码根目录>\grpc\examples\protos\helloworld.proto

<grpc项目工程目录>\third_party\protobuf\Release\protoc.exe

<grpc项目工程目录>\Release\grpc_cpp_plugin.exe

到工程目录下。

拷贝:

<grpc源码根目录>\grpc\include\grpc

<grpc源码根目录>\grpc\include\grpc++

<grpc源码根目录>\grpc\include\grpcpp

<grpc源码根目录>\grpc\third_party\protobuf\src\google

到项目头文件目录下。

注意:新建的测试程序项目工程的字符集需要和grpc工程的字符集一致,否则加载静态库会出错,设置方法:项目属性-配置属性-高级-字符集-使用多字节字符集

2、在工程目录下,打开cmd,依次执行下面的命令:

protoc.exe --grpc_out=. --plugin=protoc-gen-grpc=grpc_cpp_plugin.exe helloworld.proto

protoc.exe --cpp_out=. helloworld.proto

将生成下面的4个文件:

helloworld.grpc.pb.cc

helloworld.grpc.pb.h

helloworld.pb.cc

helloworld.pb.h

注意:

(1).proto文件不支持中文,如果文件中包含中文,运行proto.exe时会报错;

(2).proto文件对大小写不敏感,即:在.proto文件中使用大小写定义变量,运行protoc.exe生成源文件时会自动统一转换为小写。

3、工程目录下,新建lib目录,然后把grpc工程目录下的所有.lib文件拷过来。

拷贝完成后,在VS项目工程的“属性>配置属性>链接器>命令行>其他选项”中,设置

"[lib目录]\*.lib "

即可在工程中一次性引入全部lib。

注意:由于lib文件的链接是软链接,所以如果一个lib文件依赖另一个lib文件,那么需要将两个lib文件都拷贝过来。这里为了方便,直接将grpc工程目录下的全部.lib拷贝过来。如果缺少部分lib,编译时会报错,“无法解析的外部符号.....”

4、分别编译客户端和服务端程序,然后运行程序。

由于greeter_client.cc和greeter_server.cc都有main函数,所以需要分开编译,分别生成客户端程序和服务端程序。

然后运行服务端程序和客户端程序,效果如下:

Visual Studio环境编译和使用grpc框架相关推荐

  1. 使用 Visual Studio 2015 编译 BitShares-Core

    0. 环境准备 * 64 位 Windows 系统,比如 Windows Server 2012 R2 Standard edition 1. 安装 Visual Studio 2015 with U ...

  2. Visual Studio 2010编译时总是提示调用目标发生了异常的解决

    现象: 无论建立的是Win32 Console的解决方案,还是MFC的解决方案,重新打开Visual Studio 2010之后,编译时总是提示"调用的目标发生了异常" 解决: 1 ...

  3. 用Visual Studio 2015 编译张帆的第一个WDM驱动,并且成功安装到Windows 10里面

    用Visual Studio 2015 编译张帆的第一个WDM驱动,并且成功安装到Windows 10里面!!! 开发工具:Visual Studio 2015 企业版 目 标 机:Windows 1 ...

  4. Visual studio中编译和使用libpng和zlib

    Visual studio中编译和使用libpng和zlib https://blog.csdn.net/jinzhuojun/article/details/7972747 转载于:https:// ...

  5. 【错误记录】Visual Studio 中编译 NDK 报错 ( error : cannot use ‘throw‘ with exceptions disabled )

    文章目录 一.报错信息 二.解决方案 一.报错信息 使用 Visual Studio 2019 编译 Android NDK 项目 , 报错如下 : 已启动生成- 1>------ 已启动生成: ...

  6. 【错误记录】Visual Studio 中编译 NDK 报错 ( no matching function for call to ‘cacheflush‘ cacheflush(); )

    文章目录 一.报错信息 二.报错信息 一.报错信息 使用 Visual Studio 2019 编译 Android 平台的 NDK 项目 ; 编译时报错 ; 报错信息 : 1>./native ...

  7. (Windows7)Visual Studio 2017编译运行出现脚本错误的解决方法

    (Windows7)Visual Studio 2017编译运行出现脚本错误的解决方法 参考文章: (1)(Windows7)Visual Studio 2017编译运行出现脚本错误的解决方法 (2) ...

  8. Visual Studio 安装编译SDK

    Visual Studio 安装编译SDK 由于重新安装了VS,安装的时候没有注意到SDK的安装,使得编译的时候连 stdio.h的库都找不到,提示如下错误. 找到 项目--属性页--常规--Wind ...

  9. Windows Visual Studio 2019 编译 bochs

    文章目录 Visual Studio 2019 编译 bochs 下载安装Cygwin或者MinGW/Msys2 下载bochs源码 生成Visual Studio 2019 项目解决方案 可能遇到的 ...

最新文章

  1. CentOS7.5(64位)安装Anaconda
  2. 10大主流压力测试工具推荐(转载)
  3. jQuery Validate 验证,校验规则写在控件中的具体例子
  4. java最接近对点及距离_最接近点对问题_分治法
  5. 用火车头采集小游戏网站教程[转载]
  6. Gateway源码分析
  7. (33)FPGA原语设计(BUFGCE)
  8. HTTP和HTTPS的理解
  9. Help Me Escape
  10. 如何用常量代替session_如何用Python代替Visual Basic应用程序并节省了很多时间
  11. 金蝶K3 Wise单据导入导出工具使用说明
  12. IDEA类图标有小叉叉×
  13. Django实现websocket聊天室
  14. 32位和64位CPU操作系统的区别
  15. 20165232 结对编程第二周总结
  16. 基于深度学习的3D pose estimation总结(包括几篇2D pose estimation)
  17. Day17(集合)学习记录(HashSet集合 HashMap集合)
  18. total commander 自定义快捷键
  19. 文件缓冲区和inode详解
  20. Asp.net Core 6.0 之动态修改Cshtml(发布篇)

热门文章

  1. [转载]国画技法视频教学网址指南
  2. 悦刻母公司雾芯季报图解:营收17亿同比降29% 净利6.87亿
  3. 豆豆 - 遥远的救世主(2014年10月18日)
  4. 6.ES中什么是索引(ES中的索引指的是库)的分片和备份(副本)?ES中的关键词有哪些? 嘻哈的简写笔记——Elastic Search
  5. 面经/字节跳动,面试流程及问题分享(附答案)
  6. 大数据技术之 Hadoop概念讲解
  7. Smarty介绍安装及配置
  8. 秀一下 蜜汁凉拌苦瓜~~
  9. tags文件生成及使用
  10. 计算机专业清华世界第一!US NEWS全球大学排名出炉