美文网首页开源工具技巧
protobuf使用出现的问题以及方法

protobuf使用出现的问题以及方法

作者: yangxingpping | 来源:发表于2017-02-04 22:57 被阅读0次

    在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使用出现的问题以及方法

        本文链接:https://www.haomeiwen.com/subject/prusittx.html