gpt4 book ai didi

c++ - Codegear C++ Builder 2007 是否有 Protocol Buffers 绑定(bind)?

转载 作者:行者123 更新时间:2023-11-28 07:39:08 25 4
gpt4 key购买 nike

根据我几年前阅读这篇文章的理解,有人曾经让 Protocol Buffers 与 Codegear C++ Builder 2007 一起工作

https://groups.google.com/forum/?fromgroups=#!topic/protobuf/YapO_DqFVvc

上述 Builder 2007 版本的 protobuf 的作者将其上传到第三方 URL,但是指向它的链接似乎早已失效,从讨论和 Protocol Buffers 2.5.0 的当前状态来看,修复/更改从未从 protobuf fork 或合并到主干中。

更新:当将 protoc.exe (2.5.0) 生成的代码用于任一示例 .proto 文件时,C++ Builder 2007 会提示许多问题,包括 google::internal 命名空间中名称的“重复条目”(例如 google::internal::kEmptyString - 它还提示基于 std::hash 的容器和 memset 是一个无法识别的符号。

最佳答案

我花了几天时间才找到一个解决方案,但下面是我如何让它在 Codegear 2007 中运行:

  1. 获取protobuf的C++ Builder版本https://github.com/saadware/protobuf-cppbuilder - 这是基于 2.4.1,所以有点过时,但我猜想可以将 C++ 构建器更改合并到 2.5.0(或任何最新版本)中。 protobuf 的 C++ Builder 版本适用于 Builder 2009,但它修复了 std::hash 的各种问题,因此它是比 Google 版本更好的起点。

  2. ./src/google/protobuf 文件夹中复制以下 .cc 文件并将它们更改为 .cpp 扩展名。 .cbproj 格式似乎有问题,它不喜欢 .cc(您需要将所有这些文件添加到您的 Codegear 2007 .cbproj - 这些是 libprotobuf-lite 所需的文件)。

    extension_set.cpp
    generated_message_util.cpp
    message_lite.cpp
    repeated_field.cpp
    wire_format_lite.cpp
    stubs\common.cpp
    stubs\once.cpp
    io\coded_stream.cpp
    io\zero_copy_stream.cpp
    io\zero_copy_stream_impl_lite.cpp
  3. 根据“Dazza”的主题,使用文件中的查找和替换(例如 Notepad++)重命名 google::internal 命名空间。请注意,需要区分大小写的查找/替换,因为有时会出现名称“Internal”用于其他用途的情况。对于这一步,我遵循了 Dazza 的建议,将其更改为 google::internals。 (注意 - 这既适用于 libprotobuf-lite 也适用于用于生成代码的字符串)

  4. 在生成的代码字符串中,搜索所有出现的memset并将它们更改为std::memset(这主要用于代码生成器库; libprotoc。如果不这样做,每次重新生成 .proto 绑定(bind)时,C++ 构建器将无法识别 memset

    <
  5. 使用 Visual Studio 构建 protoc.exe(我无法在 Builder 中构建 Protoc.exe,但这应该没关系,代码生成器只需要构建一次)

  6. 修改示例.proto文件使用lite运行时;选项 optimise_for = LITE_RUNTIME。注意 - 反射功能在打开此选项时不可用。

  7. 使用 --cpp_out 在您的 .proto 文件上运行 protoc.exe。输出文件的扩展名为 .cc - 您需要将其重命名为 .cpp

  8. 将生成的文件添加到项目并构建。

(注意 - 仍然有一些 Unresolved 警告 - 一个提示多余的 & 占用了一个函数的地址,还有一些提示有符号/无符号比较 - 但至少它建立了并且似乎有效)

关于c++ - Codegear C++ Builder 2007 是否有 Protocol Buffers 绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16180165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com