【问题标题】:can grpc use protobuf of older version?grpc可以使用旧版本的protobuf吗?
【发布时间】:2021-07-14 18:49:18
【问题描述】:

我正在尝试在我的 macbook 上为 grpc 构建 .proto 文件的编译环境。我当前的本地 protobuf 版本在我的 iOS 项目中是 3.11.4,但最新的 grpc 直接到 protobuf 3.15.8。由于某种原因我自定义了我的protobuf代码,所以我不想升级它,编译环境也是如此。

我的问题是:我可以在安装 grpc 环境的同时保留我的本地旧版本 protobuf(3.11.4) 环境吗?

当我使用pod install生成xx.pbobjc.h xx.pbobjc.m xx.pbrpc.h xx.pbrpc.m时,文件显示错误

#error This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer library sources.

当我像这样在终端中使用 cmd 时

protoc -I .  --objc_out=./output --grpc_out=./output --plugin=protoc-gen-grpc=grpc_objective_c_plugin search.proto

会了

dyld: Library not loaded: /usr/local/opt/protobuf/lib/libprotoc.26.dylib
  Referenced from: /Users/rose/Documents/Code/JobProjects/grpcProto/grpc_objective_c_plugin
  Reason: image not found

看起来它已链接到更高版本的 protobuf。

这是我的 protobuf 版本

$ protoc --version
libprotoc 3.11.4

'brew install grpc'依赖于最新的protobuf(3.15.8),我想我应该克隆grpc并自己构建环境,所以我这样做了,但似乎grpc仍然没有与我的旧protobuf链接我尝试从 .proto 文件生成代码,有人可以告诉我如何实现吗?我说清楚了吗?如果我不这样做,请告诉我

【问题讨论】:

  • 这将是特定于语言/框架的;在 Java 中有效的东西可能在 C 中无效,在 C# 中可能有效,在 Python 中可能无效。你可以说得更详细点吗?实际的 RPC 和 marahaller 核心并没有内在联系,但是实现中是否存在这种纯度是特定于实现的
  • @MarcGravell 抱歉,我没有说清楚,这不是关于项目,而是关于编译环境,我需要它来从 .proto 文件生成 Objective-c 代码。如果你问的话,我在我的 iOS 项目中使用了 Objective-c。谢谢

标签: ios objective-c protocol-buffers grpc


【解决方案1】:

我终于得到了答案。这是 Homebrew 的错,'brew install grpc' 生成的 grpc_objective_c_plugin 仅依赖于 3.15.8 protobuf,较低版本将无法使用。我的同事有 3.11.4 protobuf 环境,他成功运行了从 github 下载的最新编译插件...修改一些#import 代码后,编译文件在我的项目中构建,没有错误。

对于iOS开发者来说,不需要'make install' grpc项目,你只需要创建一个.podspec文件作为grpc文件并修改podfile,'pod install'之后会有一个grpc_objective_c_plugin文件在下面Pods/!ProtoCompiler-gRPCPlugin/,这个插件依赖于你电脑上的protobuf环境,Protobuf版本限制应该>=3

希望这将帮助任何人。

【讨论】:

    猜你喜欢
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    相关资源
    最近更新 更多