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.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例子需要引用的头文件和库

 

 

 

 

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
是的,编译 gRPC 需要使用 C++ 和 NDK。以下是在 Android 上编译 gRPC 的步骤: 1. 下载 gRPC 的源代码,并解压缩到一个合适的目录下。 2. 下载 NDK,并解压缩到一个合适的目录下。 3. 在 gRPC 源代码目录中,创建一个名为 `CMakeLists.txt` 的文件,内容如下: ``` cmake_minimum_required(VERSION 3.10) project(grpc) set(CMAKE_CXX_STANDARD 11) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) add_library(grpc STATIC ${CMAKE_CURRENT_SOURCE_DIR}/src/cpp/client.cc ${CMAKE_CURRENT_SOURCE_DIR}/src/cpp/server.cc) target_link_libraries(grpc protobuf) ``` 4. 在 gRPC 源代码目录中,创建一个名为 `build.sh` 的脚本文件,内容如下: ``` #!/bin/bash export ANDROID_NDK=/path/to/ndk export PATH=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH mkdir -p build_android cd build_android cmake .. \ -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \ -DANDROID_ABI=arm64-v8a \ -DANDROID_PLATFORM=android-21 \ -DANDROID_STL=c++_static \ -DANDROID_CPP_FEATURES=rtti\ exceptions \ -DCMAKE_BUILD_TYPE=Release make ``` 将 `/path/to/ndk` 替换为你的 NDK 路径。 5. 运行 `build.sh` 脚本文件,等待编译完成。 6. 编译完成后,在 `build_android` 目录中会生成 `libgrpc.a` 静态库文件,你可以将它们链接到你的 Android 应用中使用。 注意:在使用 gRPC 时,你还需要在 Android 应用中使用 Protocol Buffers,因为 gRPC 使用 Protocol Buffers 进行序列化和反序列化。你可以按照前面提到的步骤,在 Android 上编译 Protocol Buffers。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值