操作系统和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.0\bin\Debug(Release)下
libprotobuf(d).lib和protoc.exe在E:\grpc-1.25.0\bin\third_party\protobuf\Debug(Release)下
ssl.lib在E:\grpc-1.25.0\bin\third_party\boringssl\ssl\Debug(Release)下
crypto.lib在E:\grpc-1.25.0\bin\third_party\boringssl\crypto\Debug(Release)下
cares.lib在E:\grpc-1.25.0\bin\third_party\cares\cares\lib\Debug(Release)下
zlibstatic(d).lib在E:\grpc-1.25.0\bin\third_party\zlib\Debug(Release)下
使用
grpc的头文件在E:\grpc-1.25.0\include下面,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例子需要引用的头文件和库