grpc 可以使用旧版本的 protobuf 吗?

时间:2021-04-20 14:45:22

标签: ios objective-c protocol-buffers grpc

我正在尝试在我的 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 文件生成代码,有人能告诉我如何实现吗?我说清楚了吗?如果我没有,请告诉我

1 个答案:

答案 0 :(得分:0)

我终于知道答案了。这是 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

希望这能帮助到任何人。

相关问题