C++ gRPC服务Stub未生成:protoc仅编译消息不生成服务类求助
问题原因与解决方法
你当前的编译命令只指定了--cpp_out参数,这只会让protoc生成Protobuf消息对应的C代码,不会生成gRPC服务类——gRPC的服务框架代码需要依赖gRPC官方提供的C插件来生成,protoc本身不负责这部分工作。
解决办法很简单,修改编译命令,添加gRPC相关的生成参数:
- 首先确认你已经拿到了
grpc_cpp_plugin.exe(这个是gRPC为C提供的protoc插件,用来把proto里的服务定义转成C服务代码) - 用下面的命令重新编译:
把命令里的protoc -I=".\protos\" --cpp_out=".\protos\" --grpc_out=".\protos\" --plugin=protoc-gen-grpc="你的grpc_cpp_plugin.exe实际路径" ".\protos\mathtest.proto"你的grpc_cpp_plugin.exe实际路径替换成真实路径,比如从源码编译gRPC的话,插件一般在grpc/build/bin目录下;如果是用包管理安装的,找对应工具链的bin目录即可。
执行完这个命令后,你会发现多了两个文件:mathtest.grpc.pb.h和mathtest.grpc.pb.cc,这两个文件里就包含了你需要的Mathematics服务类,包括客户端调用的存根和服务端需要实现的抽象类。
另外注意,后续编译项目时,要把这两个grpc相关的文件也加入编译列表,并且链接gRPC的库文件。
内容的提问来源于stack exchange,提问作者Rablidad
相关产品推荐
相关产品推荐

