使用MSVC 2015编译GRPC 0.15,以便在Windows上使用Qt 5.6

时间:2016-07-28 16:18:54

标签: c++ qt visual-c++ protocol-buffers grpc

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

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

1 个答案:

答案 0 :(得分:2)

步骤:

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

下载CMake / CMake-gui并将protobuf \ cmake文件夹输入其中。这将生成您的视觉stuido项目

在发布模式下编译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文件夹。如果你打算部署你的app,你将需要从那里开始.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。它将生成需要与protoc.exe一起存储的grpc_cpp_plugin.exe

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