使用 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 桌面应用程序的便携式安装
Qt Creator 4.3.1 未检测到 MSVC 2015 编译器
Qt安装显示:MSVC2015 编译器带有感叹号,及解决办法