使用 MSVC 2015 编译 GRPC 0.15 以在 Windows 上与 Qt 5.6 一起使用

Posted

技术标签:

【中文标题】使用 MSVC 2015 编译 GRPC 0.15 以在 Windows 上与 Qt 5.6 一起使用【英文标题】:Compiling GRPC 0.15 with MSVC 2015 for usage with Qt 5.6 on Windows 【发布时间】:2016-07-28 16:18:54 【问题描述】:

这个过程非常不明显且容易出错,所以我认为需要一个描述正确过程的地方。

我将在下面回答我自己的问题,但它或多或少是一个 hack 和斜线解决方案,因为 Visual Studio 对我来说主要是 Terra Incognita,我只是偶然发现了一个经过大量试验和错误后有效的组合,有时不是甚至了解我在做什么。如果它看起来很糟糕 - 对此感到抱歉。根本没有合适的指南供我使用。

【问题讨论】:

【参考方案1】:

步骤:

从各自的 github 存储库下载 GRPC 和 Protobuf3。 使用存储库中的 GRPC 比使用 zip 包更好,因为这样您就可以通过 git 填充“third_party”文件夹。

下载 CMake/CMake-gui 并将 protobuf\cmake 文件夹提供给它。这将生成您的视觉工作室项目

在发布模式下按原样编译 All_Build.vcxproj。这将生成 protoc.exe 文件,您必须将其存储在某处。

诡计来了:

默认情况下,Release protobuf/grpc 项目编译为 /MT。 机会是 - qtcreator 正在将您的项目编译为 /MD。 如果您尝试按原样使用 MSVC 生成的库 - 您将遇到库格式冲突。

所以第一步是编辑 libprotobuf 子项目:

C/C++->代码生成->运行时库到多线程 DLL (/MD)

下一个问题:默认项目会生成一个 .lib 文件,即使使用 /MD 我也无法成功附加。

如果有人知道如何在尝试使用它时避免很多“未定义的引用”错误,请随时在下面发表评论。

// these are only necessary if you can't link statically as I do
Configuration Properties->General->Target extension : .dll
Configuration Properties->General->Configuration Type : Dynamic Library
We also have to add a bunch of defines:
Configuration Properties->C/C++->Preprocessor : add PROTOBUF_USE_DLLS;LIBPROTOBUF_EXPORTS

现在您可以编译 protobuf。执行此操作并将 libprotobuf.lib 和 libprotobuf.dll 存储在某处

继续 grpc。

打开 grpc.sln

由于我不经常在工作中使用 MSVC,因此后面的这些步骤并不明显。

您需要先在 Visual Studio 中安装 Nuget。 Nuget 将在编译时将一堆依赖项拉入您的 grpc\vsprojects\packages 文件夹。如果您计划部署您的应用程序,稍后您将需要那里的 .dll。

安装后,根据您计划使用的模式将 /MT /MTd 切换到 /MD /MDd,与 protobuf 相同。

/MD 对应于 Release build(对我来说),而 /MDd 对应于 Debug

此外,您需要删除“z”和“borinssl”子项目,因为它们在 Windows 上已损坏并且无法正确编译。

编译项目。它将生成 grpc.lib grpc_unsecure.lib grpc++.lib grpc++_unsecure.lib 在构建项目时您需要将其存储在 qtcreator 可访问的位置(与 libprotobuf.lib 和 libprotobuf.dll 相同)

打开 grpc_protoc_plugins.sln

将包含 libprotobuf.lib 的文件夹添加到项目配置中的库目录中。

编译grpc_cpp_plugin。它将生成 grpc_cpp_plugin.exe,您需要将其与 protoc.exe 一起存储

如果您计划部署您的应用程序,您将需要复制从包文件夹中为您收集的一堆依赖项 nuget: libeay32.dll ssleay32.dll zlib.dll

【讨论】:

以上是关于使用 MSVC 2015 编译 GRPC 0.15 以在 Windows 上与 Qt 5.6 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

使用 msvc 2015 编译的 Windows 桌面应用程序的便携式安装

msvc2015 编译 Qt 4.8.7 和 4.8.6

Qt Creator 4.3.1 未检测到 MSVC 2015 编译器

Qt安装显示:MSVC2015 编译器带有感叹号,及解决办法

LNK2001 在 VS 2013 (MSVC 18) 上,但不在 VS 2015 (MSVC 19) 上

Qt5 + msvc2015编译器 环境配置 (不安装VS)