步骤:
从各自的 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