Codegear C ++ Builder 2007是否存在协议缓冲区绑定?

时间:2013-04-23 22:20:29

标签: c++ protocol-buffers c++builder c++builder-2007

根据我多年前阅读此帖子的理解,有人曾使用协议缓冲区与Codegear C ++ Builder 2007一起工作

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

以上Builder 2007版protobuf的作者将其上传到第三方URL,但是它的链接似乎已经很久了,并且根据讨论和Protocol Buffers 2.5.0的当前状态判断修复/改变从未从protobuf分叉或合并到主干。

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

1 个答案:

答案 0 :(得分:1)

我花了几天时间才找到解决方案,但是这就是我如何在Codegear 2007中使用它的方法:

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

  2. 获取.cc文件夹中以下./src/google/protobuf个文件的副本,并将其更改为.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命名空间。请注意,需要区分大小写的查找/替换,因为存在名称“内部”用于其他事项的情况。对于这一步,我遵循Dazza建议将其更改为google::internals。 (注意 - 这是libprotobuf-lite和用于生成代码的字符串)

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

  5. 使用Visual Studio构建protoc.exe(我无法在Builder中构建Protoc.exe,但这无论如何都不重要,代码生成器只需要构建一次)

    < / LI>
  6. 修改示例.proto文件使用lite运行时; option optimise_for = LITE_RUNTIME。注意 - 打开此选项时无法使用反射功能。

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

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

  9. (注意 - 仍然有一些警告未完成 - 一个抱怨多余的&获取一个函数的地址,还有一些抱怨签名/未签名的比较 - 但至少它构建并且似乎工作)