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= !主题/protobuf YapO_DqFVvc
上述Builder 2007版本的protobuf的作者将其上传到第三方URL,但是到它的链接似乎已经死了,并且从讨论和Protocol Buffers 2.5.0的当前状态判断,修复/更改从未从protobuf分叉或合并到主干中。
更新:当使用生成的代码从protocol .exe(2.5.0)的任何一个例子。proto文件,c++ Builder 2007抱怨了大量的问题,包括"重复条目"的名称在google::内部命名空间(如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 stubscommon.cpp stubsonce.cpp iocoded_stream.cpp iozero_copy_stream.cpp iozero_copy_stream_impl_lite.cpp
-
根据'Dazza'的线程使用查找和替换文件(例如notepad++)来重命名google::内部命名空间。请注意,需要区分大小写的查找/替换,因为有时会将名称"Internal"用于其他事情。对于这一步,我按照Dazza的建议将其更改为
google::internals
。(注意-这既适用于libprotobuf-lite,也适用于用于生成代码的字符串) -
在生成的代码字符串中,搜索所有出现的
memset
并将它们更改为std::memset
(这主要用于代码生成器库;libprotoc
。如果不这样做,每次重新生成.proto绑定时,c++构建器将无法识别memset
。 -
使用Visual Studio构建protoc.exe(我无法获得protoc.exe构建在Builder中,但这应该无关紧要,代码生成器只需要构建一次)
-
修改示例.proto文件使用lite运行时;
option optimise_for = LITE_RUNTIME
。 -
使用
--cpp_out
在.proto文件上运行protoc.exe
。输出文件将具有.cc
扩展名-您需要将其重命名为.cpp
-
将生成的文件添加到您的项目并构建
(注意-仍然有一些突出的警告-一个抱怨多余的&
获取函数的地址,以及其他一些抱怨有符号/无符号比较-但至少它构建并且似乎可以工作)
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 从原始字节解码协议缓冲区(以 C++为单位)
- 如何使用ZeroMQ为协议缓冲区编写自己的RPC实现
- 协议缓冲区字符串字段的文本编码
- 构建使用协议缓冲区(不含 APK)的 Android 可执行 gRPC 服务器
- 无法使用 ReadBinaryProto Tensorflow 加载协议缓冲区
- 协议缓冲区的静态链接会导致与现有符号冲突
- 协议缓冲区ParseFromString不检查消息结尾
- 与Qt交叉编译到Raspberry Pi 3B+通讯录(协议缓冲区)-错误符号查找错误
- 编译的谷歌协议缓冲区不工作(C++)
- 使用协议缓冲区创建通用反序列化程序
- 在协议缓冲区 c++ 中反序列化字符串数组
- 如何释放协议缓冲区内存
- 协议缓冲区错误版本
- 协议缓冲区#3将消息从c ++发送到c#
- 该程序是针对协议缓冲区运行时库的2.6.1版本编译的,该版本与已安装的版本(3.5.0)不兼容
- 浅拷贝到协议缓冲区的字节字段中
- 协议缓冲区2和3在同一C Linux应用程序中
- 使用谷歌协议缓冲区 - 如何在.proto文件中定义字段
- 我是否需要删除传递给谷歌协议缓冲区(protobuf)的对象