Я пытаюсь использовать gRP C в проекте Visual C ++.
Пока у меня есть:
1) Сборка gRPC
с vcpkg
: vcpkg install grpc:x64-windows
2 ) Интегрированы библиотеки vcpgk
с Visual Studio: vcpkg integrate install
Пока все хорошо - intellisense автоматически заполняет пространство имен и т. Д. c.
Файл моего клиента cpp
выглядит следующим образом :
#include "pch.h"
#include <iostream>
#include <memory>
#include <string>
#include <grpcpp\grpcpp.h>
#include "GRPCServerInterface.grpc.pb.h"
#include "FileFormat.pb.h"
using grpc::Channel;
using grpc::ClientContext;
using grpc::Status;
using namespace GRPCServerInterface;
int main()
{
std::cout << "Hello World!\n";
// prepare send message & payload
IsFormatSupportedInput msg;
msg.set_fileextension(".asp");
// prepare reply
IsFormatSupportedOutput rpl;
// connect
FileHandler::Stub ClientStub = FileHandler::Stub(grpc::CreateChannel("localhost:50051", grpc::InsecureChannelCredentials()));
ClientContext context;
// execute rpc
Status status = ClientStub.IsFormatSupported(&context, msg, &rpl);
// handle result
if (status.ok())
{
std::cout << "Format supported says:" << std::endl << "\t formats read: " << rpl.readsupportedformats() << std::endl << "\t formats write: " << rpl.writesupportedformats() << std::endl;
}
else
{
std::cout << status.error_code() << ": " << status.error_message() << std::endl;
}
}
Все сообщения и proto
файлы завершаются и работают в целом, поскольку я уже использую их в проектах python и c#.
При сборке Visual Studio создает Примерно 125 ошибок, все в файлах, которых я никогда не трогал.
В GRPCServerInterface.pb.h
есть identifier GOOGLE_DCHECK is undefined
Все остальные ошибки member abc may not be initialized
в различных заголовочных файлах в grp c включает, например, member "google::protobuf::Any::kIndexInFileMessages" may not be initialized
в файле any.pb.h
. Многие другие в type.pb.h
и descriptor.pbp.h
.
И последнее, но не менее важное: мне предлагается добавить #iclude "pch.h"
к автоматически сгенерированным классам protobuf grpcserverinterface.grpc.pb.cc
и grpcserverinterface.pb.cc
- добавление этого немного изменится, но в основном все ошибки все еще undefined symbol
и member may not be initialized
. И я действительно не хочу изменять автоматически сгенерированный код каждый раз.
Что мне не хватает? Или это просто бесполезная попытка использовать grp c с Visual Studio, и я должен просто перейти к среде сборки, такой как bazel?