在 Windows 上链接 gRPC for Visual C++

2024-04-02

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

到目前为止我有:

1) 构建gRPC with vcpkg: vcpkg install grpc:x64-windows2) 综合vcpgk带有视觉工作室的库:vcpkg integrate install

到目前为止,一切都很好——智能感知自动完成命名空间等。

我的客户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 个错误,所有这些错误都在我从未接触过的文件中。

In GRPCServerInterface.pb.h, 有identifier GOOGLE_DCHECK is undefined

所有其他错误都是member abc may not be initialized在 grpc 包含的各种头文件中,例如member "google::protobuf::Any::kIndexInFileMessages" may not be initialized在文件中any.pb.h。还有更多在type.pb.h and descriptor.pbp.h.

最后但并非最不重要的一点是,我收到提示添加#iclude "pch.h"到自动生成的 protobuf 类grpcserverinterface.grpc.pb.cc and grpcserverinterface.pb.cc- 添加它会改变一点,但基本上所有错误仍然存​​在undefined symbol and member may not be initialized。而且我真的不想每次都修改自动生成的代码。

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


解决了!

解决步骤分两步:

1)我禁用了整个项目的预编译头 - 这使得#include "pch.h离开。您可能只对 protobuf 文件禁用它,因为它可以在每个文件的基础上完成。

2)最后列出的错误之一是unresolved external symbol __imp_WSASocketA,这最终让我想到了这个问题未解析的外部符号 LNK2019 https://stackoverflow.com/questions/16948064/unresolved-external-symbol-lnk2019/16948470。我刚刚包括#pragma comment(lib, "Ws2_32.lib")在一个源文件中,现在一切都很完美。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Windows 上链接 gRPC for Visual C++ 的相关文章

随机推荐

  • opencv矩阵数据能保证连续吗?

    我知道 OpenCV 矩阵中包含的数据不能保证是连续的 为了让自己清楚 这里有一段Opencv 文档 https docs opencv org 3 4 0 d3 d63 classcv 1 1Mat html details OpenCV
  • 将 EF4 与 Caliburn.Micro 绑定:我应该将我的实体公开为 ViewModel 的属性吗?

    使用 Caliburn Micro 我想知道将 EF4 实体公开为 ViewModel 的属性 讨论过的一种技术 的优缺点here http kboek blogspot com 2011 01 activerecord caliburn
  • 在 jsdom 测试中卸载/销毁组件

    有没有办法卸载和垃圾收集使用安装的 React 组件TestUtils renderIntoDocument在 jsdom 测试中 我正在尝试测试发生的事情componentWillUnmount and TestUtils renderI
  • 如何根据Python中的条件从现有数据帧创建多个数据帧

    我有一个数据框 如下所示 我想根据列 ID 从该数据帧创建多个数据帧 df pd DataFrame results print df 结果是 ID NAME COLOR 0 01 ABC RED 1 01 ABC ORANGE 2 01
  • SQLalchemy 中带有子查询、分组依据、计数和求和函数的高级 SQL 查询

    我写了以下查询 select distinct table3 select count from table2 where table2 cus id table3 id as count select sum amount from ta
  • flutter 中任务 ':app:checkDebugManifest'(类型 'CheckManifest')的配置出现问题

    我正在构建我的应用程序 当构建时发生此错误时 FAILURE Build failed with an exception What went wrong A problem was found with the configuration
  • 如何构建具有依赖类型长度的列表?

    将我的脚趾浸入依赖类型的水域中 我对规范的 具有静态类型长度的列表 示例进行了破解 LANGUAGE DataKinds GADTs KindSignatures a kind declaration data Nat Z S Nat da
  • 将字节转换为图像

    如何将图像的字节转换为图像 最简单的方法可能是将字节数组包装在MemoryStream http msdn microsoft com en us library system io memorystream aspx然后使用Image F
  • wget 未被识别为内部或外部命令

    我正在开发一个程序 当我进行新的开发并添加新的补丁时 它会自动更新我的游戏 当我运行补丁更新时 它无法将 wget 识别为内部或外部命令 游戏 Checkforupdates cls cd C AirlineSim echo Checkin
  • 可以在 ASP.NET MVC 中重载控制器方法吗?

    我很好奇是否可以在 ASP NET MVC 中重载控制器方法 每当我尝试时 我都会收到以下错误 这两种方法接受不同的参数 这是不能做的事情吗 当前对控制器类型 MyController 上的操作 MyMethod 的请求在以下操作方法之间不
  • EntityType 未定义键

    我正在创建一个应用程序 用户通过 Facebook oAuth 登录 然后设置歌曲列表 我收到以下错误消息 BandFinderCsharp Models IdentityUserLogin EntityType IdentityUserL
  • 如何将属性传递到 Backbone 视图?

    我正在使用 Backbone v1 0 0 开发我的应用程序 在开始工作期间 现在已经更新到 v1 1 0 所以在我以前能做的地方 var myView new MyView hash something 并访问hash在视图内部使用 th
  • 保存应用程序状态 AIR

    有没有办法在 AIR 桌面版 Flex AS3 中保存应用程序状态以保存文件 Thanks 您需要确保您的所有课程都已可序列化 http en wikipedia org wiki Serialization 然后在退出应用程序时将它们序列
  • 使用 sha256 与用户 ID 进行哈希和加盐

    我将在我的网站上使用 sha256 以保护我的用户密码 并且作为盐 我正在考虑使用用户 ID int auto increment 这将是独特的 但不是很长和困难 并且公开 user php id 1 但它是否唯一很重要 对吧 hash s
  • 在 zf2 mvc 之外使用 Zend_Db zf2 模块

    我正在编写一个不基于 zf2 mvc 的 PHP 应用程序 我确实只想使用 Zend Db zf2 模块 我如何配置我的应用程序以了解 如何在需要的地方找到 Zend Db 相关的 PHP 文件 我使用 phyrus 下载了 zf2 Zen
  • 在 Swift 中创建线性重力场

    Swift 中似乎已弃用矢量方法的线性重力场 这种新语言中有一堆新的 SKFieldNode 但我似乎找不到一个类似于线性重力的 属性 direction 在 Swift 中甚至不可用 也许可以使用这个通用方法 customFieldWit
  • VBA 在 Excel 单元格填充时即时将字母转换为大写

    我正在寻找一个宏自动地发生事件时被激活 如果有人插入文本值或带有文本的值cell A1 一旦他按下输入并且单元格已填充if某处有一个小写它将转换为字母大写 然而 问题是它必须是自动的 而不必自己启动宏 在工作表代码区域中输入以下事件宏 Pr
  • Chrome 扩展程序更改 popup.html 文本

    我是一个完全的新手 我想从 p 标签中获取文本并将其放入另一个 p 标签中 这样当我单击我的扩展程序时 我会看到显示的两个文本 我做错了什么 以及我以后如何避免类似的错误 弹出 html p this is the text to be r
  • 以编程方式查找和替换 pdf 中的文本

    我正在尝试创建一个 Web 脚本 该脚本允许我更改已上传的 PDF 模板并重新输出它们 我已经尝试过 Zend 它允许我写入 PDF 但这意味着在某些空间中将 PDF 留空 这对于我的需要来说太原始 了 PDFFlip 也好不到哪去 我们需
  • 在 Windows 上链接 gRPC for Visual C++

    我正在尝试在 Visual C 项目中使用 gRPC 到目前为止我有 1 构建gRPC with vcpkg vcpkg install grpc x64 windows2 综合vcpgk带有视觉工作室的库 vcpkg integrate