我是靠谱客的博主 听话寒风,最近开发中收集的这篇文章主要介绍Protocol Buffers使用注意事项,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Protocol Buffers做为广泛使用的一个序列化开源库,提供了很多语言下的支持,本文就谈谈MSVC c++使用pb遇到的问题,当然这些问题因为每个人的使用模式不同,可能都不一样,本文也不讨论怎么写proto及编译。

我们使用pb做序列化可以把pb生成静态库或者动态库(libprotobuf.dll),然后使用protoc将message生成相应的cc文件,这些cc文件结构都类似,基本不需要关心她做了什么。若只是将这些CC在A,B两个网络程序中传输数据都很正常。如果程序结构是A(可执行文件)+B(动态库),CC文件在A,B之中都有使用,A调用B提供的接口,数据交互使用CC中的类,将一个CPP文件使用在不同的工程中是常态,但是这样在MSVC不行。以下分静态库和动态库链接分别说明:

使用pb动态库连接A、B:由于每个CC文件会执行PROTOBUF_NAMESPACE_ID::internal::AddDescriptors,导致“File already exists in database”。(加宏定义PROTOBUF_USE_DLLS)。

使用pb静态库链接A、B:由于SetNoArena->IsDefault返回false,所以string在A、B之间无法传输,此处是因为在A,B之中GetEmptyStringAlreadyInited不一致。

解决办法:将所有message生成的cc封装到一个dll中,导出class。将所有CC封装为静态库未试,毕竟静态只是中间文件的打包。

 

运行环境:win10+VS2017

文中若有错误,欢迎斧正!

 

 

 

最后

以上就是听话寒风为你收集整理的Protocol Buffers使用注意事项的全部内容,希望文章能够帮你解决Protocol Buffers使用注意事项所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部