windows+vs2017 C++编译gRPC

1、需求

因为项目需要,想要在windows+vs2017环境使用C++下编程gRPC并编写demo程序,使得能够根据proto文件生成对应的c++文件。

2、资料查阅

起初根据网络资料查阅,使用git从github中下载了gRPC最新的开源代码,并通过CMake编译,之后使用vs2017进行最终的编译生成,但在vs2017编译过程中,提示版本不匹配,需要vs2019及以上版本,本想进行vs的版本升级,但考虑到项目代码版本问题,最终选择低版本的gRPC进行编译与使用,再次查阅资料,最终,根据大佬的这篇文件

在Windows搭建gRPC C++开发环境icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/552331260

,完成了vs2017+gRPC1.48版本的编译。

3、编译工具

        (1)Git;用于从github中将代码拉下

        (2)CMake;编译gRPC

        (3)Nasm;似乎是编译过程中openssl用到,不太了解,但网上搜索下载了一个

        (4)VS2017 Professional;

4、编译步骤(就是把大佬的文章复制了一遍,为了防止大佬的文章链接失效)
        (1)下载gRPC源码

使用git命令行在预备存放grpc源码的目录下执行, 此处我们下载的是 grpc 1.48.0

git clone -b v1.48.0 https://github.com/grpc/grpc

进入源码目录

cd grpc

下载依赖库

git submodule update --init

*此处注意,确保所有依赖库下载成功

可以重复执行   git submodule update --init --recursive    命令,直到没有错误提示)。

        (2)使用CMake生成工程文件

在生成工程文件时做,做如下调整:

l 添加ABSL_PROPAGATE_CXX_STD选项,类型为bool设置为true;

l 将源码目录下third_party\zlib\CMakeList.txt的第一行依赖的CMake版本修改为2.8.12;

l 添加CMAKE_INSTALL_PREFIX选项,类型为Path,设置为gRPC编译后的安装目录。

如下图所示:

点击【Configure】设置需要的编译环境,如下图所示:

点击【Finish】后配置环境日志中没有报错后,点击【Generate】生成工程文件。

        (3)编译、安装gRPC

使用管理员运行Visual Studio 2017,并打开上一步生成的工程grpc.sln。

将环境设置为Release x64生成ALL_BUILD项目。

生成INSTALL项目,此时会将生成的文件安装到第2步中CMAKE_INSTALL_PREFIX配置的路径中。

将安装目录下的bin目录路径添加到环境变量Path中,如下图所示:

至此,gRPC的c++环境已经配置好。

5、创建测试工程

大佬这里创建的C#项目,我的是C++项目,略有不同,此处略。

        (1)编译proto文件

在protos文件夹的上级目录Project2中打开命令行终端,并输入两条指令,用于生成对应.proto文件的.grpc.pb.cc/.h以及.pb.cc/.h文件。

 protoc -I="./protos" --grpc_out="./protos" --plugin=protoc-gen-grpc="D:\Project\GRPCProject\TestProject\Project2\Project2\Project2\grpc_cpp_plugin.exe" "./protos\route_guide.proto"

protoc -I="./protos" --cpp_out="./protos" "./protos\route_guide.proto"

注意:其中:grpc_cpp_plugin.exe所在路径替换为您安装的路径。且proto路径根据自已的路径修改,如果不想修改,只需要根据我的路径存放proto文件即可。

        (2)生成项目

将生成的.grpc.pb.cc/.h  .pb.cc/.h以及proto文件添加到vs中,vs切换为Release x64版本(对应gRPC编译的版本,不知道Debug版本是否有问题,暂未尝试)。

注意:此处已有xxx_client.cc客户端文件与xxx_server.cc服务端文件,是从grpc源代码的范例中拷贝出来的,并稍做了修改,路径为“xxx\grpc\examples\cpp\route_guide”

注意:需要查看生成的grpc.pb.h文件中是否包含中文注释,如果包含则需要删除中文注释,否则编译时将会出现

添加包含目录,如下图所示,路径为grpc的include安装路径

添加附加库目录,如下图所示,路径为grpc的lib安装路径

添加附加依赖项:

absl_bad_optional_access.lib

absl_bad_variant_access.lib

absl_base.lib

absl_city.lib

absl_civil_time.lib

absl_cord.lib

absl_cordz_functions.lib

absl_cordz_handle.lib

absl_cordz_info.lib

absl_cordz_sample_token.lib

absl_cord_internal.lib

absl_debugging_internal.lib

absl_demangle_internal.lib

absl_examine_stack.lib

absl_exponential_biased.lib

absl_failure_signal_handler.lib

absl_flags.lib

absl_flags_commandlineflag.lib

absl_flags_commandlineflag_internal.lib

absl_flags_config.lib

absl_flags_internal.lib

absl_flags_marshalling.lib

absl_flags_parse.lib

absl_flags_private_handle_accessor.lib

absl_flags_program_name.lib

absl_flags_reflection.lib

absl_flags_usage.lib

absl_flags_usage_internal.lib

absl_graphcycles_internal.lib

absl_hash.lib

absl_hashtablez_sampler.lib

absl_int128.lib

absl_leak_check.lib

absl_log_severity.lib

absl_low_level_hash.lib

absl_malloc_internal.lib

absl_periodic_sampler.lib

absl_random_distributions.lib

absl_random_internal_distribution_test_util.lib

absl_random_internal_platform.lib

absl_random_internal_pool_urbg.lib

absl_random_internal_randen.lib

absl_random_internal_randen_hwaes.lib

absl_random_internal_randen_hwaes_impl.lib

absl_random_internal_randen_slow.lib

absl_random_internal_seed_material.lib

absl_random_seed_gen_exception.lib

absl_random_seed_sequences.lib

absl_raw_hash_set.lib

absl_raw_logging_internal.lib

absl_scoped_set_env.lib

absl_spinlock_wait.lib

absl_stacktrace.lib

absl_status.lib

absl_statusor.lib

absl_strerror.lib

absl_strings.lib

absl_strings_internal.lib

absl_str_format_internal.lib

absl_symbolize.lib

absl_synchronization.lib

absl_throw_delegate.lib

absl_time.lib

absl_time_zone.lib

address_sorting.lib

cares.lib

crypto.lib

gpr.lib

grpc++.lib

grpc++_alts.lib

grpc++_error_details.lib

grpc++_reflection.lib

grpc++_unsecure.lib

grpc.lib

grpcpp_channelz.lib

grpc_plugin_support.lib

grpc_unsecure.lib

libprotobuf-lite.lib

libprotobuf.lib

libprotoc.lib

re2.lib

ssl.lib

upb.lib

zlib.lib

        (3)运行项目

分别注释xxx_client.cc与xxx_server.cc文件中的main函数,并编辑,即可生成对应的client与server程序,先运行server程序,在运行client程序,进行通讯尝试,成功通讯。

6、感谢大佬分享

最后,再次感谢大佬的分享

在Windows搭建gRPC C++开发环境icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/552331260

 7、关于client客户端的封装与使用

请参考我的另一篇文章VS2017+GRPC相关自定义客户端类的封装与使用(C++),如有错误,还望指正。

  • 22
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,编译 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。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值