我试图让protobuf在windows 10上为VisualC++ Visual 2022工作,但是生成的pb.h和pb.cc文件会抛出大量的错误,比如:PROTOBUF_NAMESPACE_OPEN this declaration has no storage class or type specifier
,因为我刚从go切换到C++,我想知道是否遗漏了可能对c++用户来说很明显的任何步骤。
复制步骤:i遵循以下说明:https://medium.com/@dev.ashurai/protoc-protobuf-installation-on-windows-linux-mac-d70d5380489d和这里的c++ windows部分:https://github.com/protocolbuffers/protobuf/blob/main/src/README.md
基本上使用vcpkg安装原型。然后,我使用vcpkg包文件夹中的pb.cc,从下面详细介绍的proto文件中构建pb.c和protoc.exe。我创建了一个空的C++项目并将原型文件添加到其中。
option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";
option objc_class_prefix = "HLW";
package helloworld;
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
发布于 2022-10-03 19:21:25
在安装了所有东西之后,我遇到了同样的问题,并开始将生成的.pb.h/.pb.cpp文件集成到我的项目中。在我看来,这似乎是的一个bug。
首先,确保您的Protobuf已正确安装:
如果没有使用vcpkg already
vcpkg integrate install
使其自动配置Visual以使用已安装的软件包您可以通过在visual studio中打开项目并检查项目属性:VC++ Directories \ External Include Directories
来验证安装。评估列表应该包括您的vcpkg目录。
完成之后,查看您的.pb.h头文件,并注意编译错误在哪里。如果在#include <google/protobuf/...>
行中出现错误,那么protobuf安装就有问题。如果在宏展开(如PROTOBUF_NAMESPACE_OPEN
)的行中出现错误,则执行以下操作:
namespace google { namespace protobuf {
PROTOBUF_NAMESPACE_OPEN
。希望在您修复了所有有问题的宏之后,您应该能够编译。
我认为这是Visual错误的原因是intellisense能够正确展开宏,但编译器不能。而且,并不是同一个宏的所有实例都会产生编译错误,这真的很奇怪。
https://stackoverflow.com/questions/73707127
复制相似问题