protobuf使用出现的问题以及方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了protobuf使用出现的问题以及方法相关的知识,希望对你有一定的参考价值。
参考技术A 在windows下使用protobuf,编译成dll,在使用中提示下面错误( unresolved external symbol?empty_string_once_init_@internal@protobuf@google@@3HA (int google::protobuf::internal::empty_string_once_init_),
?empty_string_@internal@protobuf@google@@3PBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@B (class std::basic_string,class std::allocator> const * const google::protobuf::internal::empty_string_)
提示这两个函数,而通过用dumpbin 查看libprotobufd.dll,其中导出了这两个函数,最后在这里找到
答案
需要在引用这个dll的工程中加入宏 PROTOBUF_USE_DLLS,通过搜索protobuf工程,发现定义这个宏之后,添加这个宏之后,会有下面的宏定义:
#define LIBPROTOBUF_EXPORT__declspec(dllimport)
有可能在加入pb之后,你的工程出现数百个未定义的类型,而明显在你的项目中,这些都是有定义的,这个时候,你可以考虑把pb消息的头文件添加到其他头文件之前
默认生成的xxx.pb.h,xxx.pb.cc的类在windows下都是没有_dllexport符号修饰,所以不可以在生成的dll中导出使用,可以通过 `protoc --cpp_out=dllexport_decl=MY_EXPORT_MACRO:path/to/output/dir myproto.proto`来实现为所有的类添加`MY_EXPORT_MACRO`修饰符。然后在另外一个h文件中定义`MY_EXPORT_MACRO`宏,然后在所有的头文件中包含它
以上是关于protobuf使用出现的问题以及方法的主要内容,如果未能解决你的问题,请参考以下文章