在 Windows 上的 VC++ 项目中使用 Protobuf 的正常、正确的方法是什么?

问题描述 投票:0回答:1

我是 C++ 新手,正在编写一个简单的程序,该程序使用 protobuf 定义 (.proto) 作为其工作的一部分。我来自 C#,在理解如何在 VC++ 项目中使用 protobuf 时遇到了很多困难。请原谅这篇又长又详细的帖子,我花了几个小时试图完成这项工作,但没有成功。

按照在线教程,我让 VS 自动从 PROTO 文件解析并生成 H/CPP 文件,除了

protoc.exe
。语法突出显示甚至可以工作,并在 IDE 中为我提供了漂亮的颜色。万岁!

"$(ProjectDir)../dependencies/protobuf/bin/protoc.exe" --proto_path=$(ProjectDir) --cpp_out=$(ProjectDir) %(FullPath)

但是,生成的头文件对其他头文件和 inc 文件有很多依赖性,而我没想到我会需要这些文件(我以为我可以通过使用 protoc.exe 来解决它,并且它会生成独立的头文件)

#include "google/protobuf/port_undef.inc"
#include "google/protobuf/io/coded_stream.h"
#include "google/protobuf/arena.h"
#include "google/protobuf/arenastring.h"
#include "google/protobuf/generated_message_tctable_decl.h"
#include "google/protobuf/generated_message_util.h"
...

我将整个 Protobuf 版本(按照说明从他们的 github 页面下载)添加到一个漂亮的 /dependencies 文件夹中,并将其添加为我的“附加包含目录”的一部分。现在我生成的文件可以找到它们的依赖项...但后来我又碰壁了。

Protobuf 源文件包含一个标头,据我所知,在 protobuf 版本中找不到该标头。我就是没有!

#include "absl/strings/string_view.h" // < !!!

因此,我通过下载 google/absl 并将其放入依赖项中,在其他包含项中破解了此内容之上的另一件事; 现在我可以编译,但无法链接,因为我缺少 protobuf.lib,我认为它是某个地方发布的一部分......但事实并非如此。 我无意自己编译 protobuf,我信任开发人员,我只是想使用二进制文件。即使我确实想自己构建它,我所遵循的步骤也感觉格外复杂,而且我不确定我应该做什么。

在破解这一切之上的另一件事以使其工作之前,我想我最好在这里询问以确保我正在这样做正常的预期方式 - 是的,我已阅读protobuf自述文件为以及他们的网站,它不是安装指南,无论如何都会进一步重定向到github自述文件。 VCPKG 对我不起作用。

  • 这种缺失的依赖关系正常吗,我是否应该按照我的方式自己在互联网上获取它来手动修补它,或者它是否应该包含在/在其他地方找到/我错过的其他东西的一部分?

  • 这是安装和使用 Protobuf 的正常方式吗,还是应该有一种自动化方式主要适用于 Windows VC++ 设置,而我让我的生活变得比必要的更加复杂?

提前抱歉,如果这些是天真的问题,我正在尝试了解在 C++ 项目中安装 protobuf 的正确方法是什么,我偶然发现了很多冲突或不完整的信息。

c++ visual-studio visual-c++ protocol-buffers protobuf-c
1个回答
0
投票

要使用Protobuf,首先需要使用CMake构建它,然后使用它。

  • 首先从这个地址获取Protocol Buffers的来源。 “https://github.com/protocolbuffers/protobuf/releases”

  • 从以下链接下载依赖库的源代码并将其放置在Protocol Buffers中的“third_party”目录中 源代码文件夹。

    https://github.com/abseil/abseil-cpp/releases

    https://github.com/google/googletest/releases

    https://github.com/open-source-parsers/jsoncpp/releases

  • 选择protobuf源目录的路径,使用CMake制作项目。

  • 打开protobuf.sln文件并构建ALL_BUILD项目。

  • 之后,构建“INSTALL”,如果出现错误,请以管理员身份打开项目,因为文件被复制到“C:\Program Files\Protobuf”目录下。

  • 文件复制完成后,存在“include”和“lib”目录 位于此地址,应添加到您的项目中。

注意:对于调试版本和发布版本,文件将完全复制到同一目录。每次构建后,将文件复制到名为 debug 和release 的单独文件夹中。调试版本中只有 libprotobufd.lib、libprotobuf-lited.lib 和 libprotocd.lib 文件带有 d 后缀。

© www.soinside.com 2019 - 2024. All rights reserved.