Win10系统编译GRPC 记录
概述
必要工具
Git和tortoisegit配置
CMake
VS2022,其他版本应该也可
nasm
选择拉取Grpc版本
这里我选择的是一个Tag:v1.51.0,
拉取代码,并更新子模块:
> git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc
> cd grpc
> git submodule update --init
拉取的过程中好像也没碰到什么大问题,也没使用VPN等工具
拉取完成以后直接使用cmake工具配置相应的选项,
附上官网编译说明文档:https://github.com/grpc/grpc/blob/master/BUILDING.md
官网是使用的cmake命令行,这里我是使用cmake GUI工具,
需要说明的是,有一个编译选项参数DgRPC_*_PROVIDER的值:
package和module
package 的话使用的是已经安装好的第三方库,但是你得保证第三方库已经安装了
module是GRPC自己从第三方库中同步相应代码然后编译,编译时间较长
个人在编译的过程中使用的参数均为module,省略了一个个安装库的麻烦
# NOTE: all of gRPC's dependencies need to be already installed
$ cmake ../.. -DgRPC_INSTALL=ON \
-DCMAKE_BUILD_TYPE=Release \
-DgRPC_ABSL_PROVIDER=package \
-DgRPC_CARES_PROVIDER=package \
-DgRPC_PROTOBUF_PROVIDER=package \
-DgRPC_RE2_PROVIDER=package \
-DgRPC_SSL_PROVIDER=package \
-DgRPC_ZLIB_PROVIDER=package
关于zlib没有拉取下来的问题
在设置完成这些以后,使用Cmake生成grpc.sln工程配置,
然后使用VS打开配置开始编译:
编译过程中出现了两个头文件找不到的情况:zconf.h和zlib.h
经过查找资料,发现这是zlib库中的两个头文件
然后我就想,把zilb下载下来,然后通过CMake配置相应的包含目录和库目录就可以了,谁知道CMake出bug了,包含目录的入口怎么也配置不了
然后没办法,想了一个下策
找到GRPC v1.51.0对应的zlib库,然后继续使用module参数进行编译
从GRPC的仓库进去,找到第三库对应的版本,就是下面图片中的hash值,然后将zlib库更新下来,并且还原到对应的版本,然后就可以编译通过了
测试程序
在grpc中自带了供测试使用的examples目录
但是需要使用protoc插件自己编译*.pb.cc *.pb.h 和 *.grpc.pb.cc *.grpc.pb.h文件
使用到了protoc.exe和grpc_cpp_plugin.exe,这个在编译GRPC第三方库的时候会生成,可以自行查找
具体的编译方法自行百度吧,
我就说以下我这里遇到的问题吧
就是一些符号链接不到的问题,解决方案也很简单
就是把编译出来的所有的库都放到链接设置的附加依赖项里面(主要是我也不知道他是缺哪个啊):
absl_bad_any_cast_impl.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
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
ssl.lib
upb.lib
zlibd.lib
zlibstaticd.lib
libprotobufd.lib
re2.lib
address_sorting.lib
总结
GRPC的编译过程还算顺利,拉取代码的过程中没遇到需要翻墙的情况,
编译的过程中碰到了CMake的bug,新增的磁盘使用Everything搜文件搜不到的情况,测试程序一直报符号链接不到问题
不过最后都顺利解决了
下一个任务,拉取和编译chromium
工程量极为艰巨