Windows平台C++ 使用VS2015 编译gRPC(总结) - Go语言中文社区

Windows平台C++ 使用VS2015 编译gRPC(总结)


操作系统和VS版本:

Win10 和 VS2015                                  文章写作时间: 2019年11月08日

如果不想折腾,直接去下载编译好的库吧:https://download.csdn.net/download/atceedsun/11966124

注意: VS2013及其以前的版本不能编译gRPC,因为gRPC依赖的protobuf库的版本是3.10.1及以上。代码里面用到了C++11里面的constexpr,而VS2013及其以前的VS编译器不支持该语法。所以不用再折腾VS2013编译gRPC了,老老实实用VS2015以上的版本来编译吧。

编译环境配置:(必需)

直接下载安装包,然后安装即可

1. CMake (安装CMake-gui, 后面的操作步骤是通过CMake-gui来操作的)

2. Active State Perl(安装完成后在命令行输入perl命令,测试安装是否正确)

3. Golang (安装完成后在命令行输入go命令,测试安装是否正确)

注意: 不建议使用Git,因为我用Git下载gRPC的代码时,一直提示网络错误,所以下面的文章里面涉及到的代码都是我手动在GitHub上面下载的。

gRPC代码下载:

1. gRPC-1.25.0  从GitHub上面下载grpc 1.25.0版本的代码, 下载完成后解压到 E:/grpc-1.25.0。路径里面尽量不要有中文

gRPC依赖的第三方库下载:

1. BoringSSL-master 下载完成后解压到 E:/grpc-1.25.0/third_party/boringssl/ 目录下

2. Protobuf-3.10.1  下载完成后解压到 E:/grpc-1.25.0/third_party/protobuf/ 目录下

3. benchmark-1.5.0  下载完成后解压到 E:/grpc-1.25.0/third_party/benchmark/ 目录下

4. c-ares-1.14.0  下载完成后解压到 E:/grpc-1.25.0/third_party/cares/cares/ 目录下

5. gflags-2.2.2  下载完成后解压到 E:/grpc-1.25.0/third_party/gflags/ 目录下

6. zlib-1.2.11  下载完成后解压到 E:/grpc-1.25.0/third_party/zlib/ 目录下

 

注意: 1.后面的四个库没有提供下载链接,都是在GitHub上面直接都能找到的。自己去下载指定的版本即可。版本一定要下载正确,其它的版本我不保证最终能够编译通过。

2.解压的时候,应该把根目录直接解压到相应的目录里面,不要再创建一层目录。例如:

使用CMake生成sln解决方案文件

按照上图来配置CMake, 然后点Configure,在弹出来的对话框里面,选择VS2015编译器。平台不填的话,默认是win32,就是32位的库。如果需要编译64位的库,平台里面选择x64,点击Finish

然后再点Generate.

CMake没有错误提示,正确生成了sln解决方案文件。 点击Open Project会打开VS工程

注意:

1. 我的机器上面安装的是VS2013和VS2017,没有安装VS2015。但是安装的有VS2015的平台工具集。所以我是用CMake生成的VS2013的工程,然后在VS里面,全选项目,右键属性,把平台工具集改成Visual Studio 2015,就可以编译通过了。

编译

到这一步,在VS里面操作就很熟悉了。 直接编译ALL_BUILD工程。全部编译成功!

========== 生成: 成功 81 个,失败 0 个,最新 0 个,跳过 0 个 ==========

编译INSTALL工程,会把库文件和头文件复制到C:/Program File(x86)/grpc下面。但是库文件复制的不全,第三方库的文件没有复制过去,需要手动去复制。

注意: 编译的结果全部都是静态库, 默认都是链接到CRT DLL的。如果不想依赖CRT DLL,可以在工程属性里面把MD/MDd 修改成 MT/MTd。批量操作的方法是使用notepad++,把所有的工程文件.vcxproj里面的MD/MDd 修改成 MT/MTd

编译出来的库的路径

address_sorting.lib,grpc.lib,gpr.lib,grpc++.lib这四个库和grpc_cpp_plugin.exe在E:grpc-1.25.0binDebug(Release)下

libprotobuf(d).lib和protoc.exe在E:grpc-1.25.0binthird_partyprotobufDebug(Release)下

ssl.lib在E:grpc-1.25.0binthird_partyboringsslsslDebug(Release)下

crypto.lib在E:grpc-1.25.0binthird_partyboringsslcryptoDebug(Release)下

cares.lib在E:grpc-1.25.0binthird_partycarescareslibDebug(Release)下

zlibstatic(d).lib在E:grpc-1.25.0binthird_partyzlibDebug(Release)下

使用

grpc的头文件在E:grpc-1.25.0include下面,protobuf的头文件在安装目录 C:/Program File(x86)/grpc/include下面

新建一个空项目,添加client和server控制台工程,用grpc_cpp_plugin.exe和protoc.exe解析helloworld.proto文件生成.h和.cc文件,包含到工程里面。具体步骤请看参考链接3。不再赘述

工程里面头文件和库文件的目录结构如下图:

C/C++-常规-附加包含目录:
../protocol/include/protobuf-3.10.1
../protocol/include/grpc-1.25.0

C/C++-预处理器-预处理器定义:
_WIN32_WINNT=0x600
_SCL_SECURE_NO_WARNINGS
_CRT_SECURE_NO_WARNINGS

链接器-常规-附加库目录:
Debug:
../protocol/lib/win32/debug
Release:
../protocol/lib/win32/release
链接器-输入-附加依赖项:
Debug:

libprotobufd.lib
grpc.lib
gpr.lib
grpc++.lib
crypto.lib
ssl.lib
cares.lib
address_sorting.lib
zlibstaticd.lib
Ws2_32.lib


Release:
libprotobuf.lib
grpc.lib
gpr.lib
grpc++.lib
crypto.lib
ssl.lib
cares.lib
address_sorting.lib
zlibstatic.lib
Ws2_32.lib

参考链接:

1. https://blog.csdn.net/Mr_zhliang/article/details/83546996 使用OpenSSL编译gRPC

2. https://www.cnblogs.com/MakeView660/p/11511136.html VS2017编译使用gRPC

3. https://www.jianshu.com/p/5987b41a7f6c  编译gRPC HelloWorld例子需要引用的头文件和库

 

 

 

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/atceedsun/article/details/102967088
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 21:58:40
  • 阅读 ( 2007 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢