繁体   English   中英

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

[英]Is there a Protocol Buffers binding for Codegear C++ Builder 2007?

根据我几年前阅读该线程的理解,有人曾经使协议缓冲区与Codegear C ++ Builder 2007一起工作。

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

上面的Protobuf Builder 2007版本的作者将其上传到第三者URL,但是指向它的链接似乎已经死光了,根据讨论和协议缓冲区2.5.0的当前状态判断,修复/更改从未从protobuf分叉或合并到树干。

更新:将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 ++ Builder的更改合并到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名称空间。 请注意,区分大小写的查找/替换是必需的,因为在某些情况下会使用名称“内部”来代替。 对于这一步,我遵循了Dazza的建议,将其更改为google::internals (注意-这既适用于libprotobuf-lite,也适用于用于生成所生成代码的字符串)

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

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

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

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

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

(注意:还有一些警告优秀-一个抱怨多余&利用函数的地址,和其他几个人在抱怨无/有符号的比较-但至少它建立并似乎工作)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM