当前位置: 首页 > 知识库问答 >
问题:

在Windows for VisualC上链接gRPC

蒋承教
2023-03-14

我正在尝试在Visual C项目中使用gRPC。

到目前为止,我已经:

1)使用vcpkg构建gRPCvcpkg install grpc: x64-windows2)将vcpgk库与Visual Studio集成:vcpkg集成安装

到目前为止,一切顺利-intellisense自动完成命名空间等。

我的客户端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;
    }
}

所有消息

在构建时,Visual Studio生成了大量125个错误,都是我从未接触过的文件。

GRPCServerInterface.pb.h中,有标识符GOOGLE_DCHECK未定义

所有其他错误是成员abc可能无法初始化在grpc的各种头文件中包括,例如成员google::Pro buf::Any::kIndexInFileMessages"可能无法初始化在文件any.pb.h中。更多在type.pb.hdescriptor.pbp.h中。

最后但并非最不重要的一点是,我收到了向自动生成的protobuf类grpcserverinterface添加iclude“pch.h”的提示。grpc。pb。cc和grpcserverinterface。pb。cc-添加它会有一些变化,但基本上所有错误仍然是未定义的符号,并且成员可能未初始化。我真的不想每次都修改自动生成的代码。

我错过了什么?或者,尝试在Visual Studio中使用grpc只是徒劳的尝试,我是否应该转向bazel这样的构建框架?

共有1个答案

简景焕
2023-03-14

解决了!

解决的两个步骤:

1) 我为整个项目禁用了预编译头-这使得include“pch.h”消失了。您可以仅为protobuf文件禁用它,因为它可以在每个文件的基础上进行。

2) 最后列出的错误之一是未解析的外部符号\uu imp\u WSASocketA,这最终导致我提出了这个问题:未解析的外部符号LNK2019。我刚刚在一个源文件中包含了pragma注释(lib,“Ws2\u 32.lib”),现在一切都很完美。

 类似资料:
  • 问题内容: 我不确定询问/搜索此问题的最佳方法: 当您单击锚点链接时,它会将您带到页面的该部分,并且链接到的区域现在位于页面的非常顶部。我希望锚链接将我发送到页面的该部分,但我想在顶部留一些空间。在这种情况下,我不希望它将我发送到“链接到”的零件上,该零件在“非常重要”的位置上,我希望在那里有100个像素左右的空间。 这有意义吗?这可能吗? 编辑以显示代码-这只是一个锚标记: 问题答案: wind

  • 在Facebook上发布链接时,在设置开放图元标记(例如og:title、og:image)后,它成功地显示了我想要的链接预览。然而,在使用bit.ly缩短链接后,当我将其发布到Facebook上时,链接预览变成“301永久移动”,没有图像。我对tinyurl也有同样的看法,我是否应该在这里添加任何特定的标签?我尝试过使用共享调试器刷新,重新爬网,尝试使用http和https迭代url,结果与短u

  • 问题内容: 我对如何链接事物有一些疑问。 想象一下,我有一个文件夹“网站”,用于存储该网站的文件,还有一个带有字体的文件夹,并且字体文件夹为每种字体有更多文件夹。我的html和CSS文件直接位于网站文件夹中。我的font- face-css文件位于/ font文件夹中。 我想将css文件链接到html文件,所以我这样做:href =“ stylesheet.css” 我也想将我的font-face

  • 问题内容: 假设我的主文件夹中有文件夹〜/ a / b,并且文件夹b包含指向“ ..”的符号链接,名为“ symlink”。然后,我在bash中执行以下操作: pwd -P打印当前工作目录,并取消引用所有符号链接。为什么工作目录位于/ home / hm / a / b的末尾,而不是/ home / hm? 问题答案: 根据, 换句话说,是指使用 逻辑 结构,而实际上使用 物理 目录结构。 逻辑结

  • 问题内容: 尝试1,香草链接到图书馆 我正在尝试使用修补版本的OpenSSL(因此DTLS更易于使用)。OpenSSL在 ./include/openssl子文件夹有大量的头文件(我认为应该如此): GCC链接到include文件夹,并给我一个错误-它找不到SSL。我或多或少地在使用与别人相同的东西。这在OSX(10.6)上有效,但在Ubuntu上无效: 尝试2,符号链接到/ usr / incl

  • 我在架构“ID”中的链接服务器(宿主服务器)上有一个名为“Application”的表。我正在尝试使用< code>sp_help查看相同的详细信息。 但我做不到。问题是:1.sp_help位于schema中。(很明显!)2.但我的表位于另一个名为的模式中。(例如,从ID.Application中选择*) > 我已经将链接服务器添加到我的本地sql server management studio