[英]C++ builder 6 and codegear's C++ builder 2009 compatibility
[英]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中工作的方式:
获取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的发行版更好。
在./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
根据“ Dazza”的线程,使用查找和替换文件(例如Notepad ++)来重命名google :: internal名称空间。 请注意,区分大小写的查找/替换是必需的,因为在某些情况下会使用名称“内部”来代替。 对于这一步,我遵循了Dazza的建议,将其更改为google::internals
。 (注意-这既适用于libprotobuf-lite,也适用于用于生成所生成代码的字符串)
在生成的代码字符串中,搜索所有出现的memset
并将其更改为std::memset
(这主要用于代码生成器lib; libprotoc
。如果不执行此操作,则每次重新生成.proto绑定时,C ++构建器将无法识别memset
。
使用Visual Studio生成protoc.exe(我无法在Pro Builder中生成Protoc.exe,但是无论如何都没关系,代码生成器只需要构建一次)
修改示例.proto文件使用lite运行时; option optimise_for = LITE_RUNTIME
。 注意-启用此选项后,反射功能不可用。
使用protoc.exe
在.proto文件上运行--cpp_out
。 输出文件的扩展名为.cc
您需要将其重命名为.cpp
将生成的文件添加到项目中并进行构建。
(注意:还有一些警告优秀-一个抱怨多余&
利用函数的地址,和其他几个人在抱怨无/有符号的比较-但至少它建立并似乎工作)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.