如何以编程方式获取 gRPC / protobuf 版本?

Posted

技术标签:

【中文标题】如何以编程方式获取 gRPC / protobuf 版本?【英文标题】:How to get gRPC / protobuf version programmatically? 【发布时间】:2020-07-30 13:43:50 【问题描述】:

是否有知道 gRPC/protobuf 版本或 git commit hash 的 API?我们希望将这些包含在我们的 C++ 应用程序的--version 信息中。

文件gRPC-Core.podspecgRPC-C++.podspecProtobuf-C++.podspec等。确实有这些信息;想知道是否可以在无需解析这些文件的情况下提取相同的内容。

【问题讨论】:

【参考方案1】:

gRPC 在其 API 中公开版本:

const GRPCAPI char* grpc_version_string ( void )

对于 C++ 实现,<grpcpp/grpcpp.h> 标头中似乎有以下方法:

std::string grpc::Version()

对于 protobuf,宏 GOOGLE_PROTOBUF_VERSION 是其版本的整数值,可以使用以下 API 转换为字符串:

std::string google::protobuf::internal::VersionString(int version)

【讨论】:

谢谢,但我认为这个 API 提供了 gRPC 核心的版本字符串,它来自 src/core/lib/surface/version.cc: const char* grpc_version_string(void) return "10.0.0"; 我正在寻找 gRPC 的 c++ 库的版本,例如对于github.com/grpc/grpc/releases/tag/v1.30.2,我希望这是 1.30.2 在浏览完模板后,我添加了<grpcpp/grpcpp.h> 公开的版本,这似乎就是您要查找的版本。

以上是关于如何以编程方式获取 gRPC / protobuf 版本?的主要内容,如果未能解决你的问题,请参考以下文章

教你使用ProtoBuf,通过gRPC服务在Android上进行网络请求

以动态消息为参数的 gRPC

如何以编程方式确定类型是不是可以通过 protobuf-net 本地序列化?

GRPC与 ProtoBuf 的理解与总结

protobuf及grpc的client请求

尝试使用 protobuf-net 通过 gRPC-Web 进行 Azure AD 身份验证