當前位置:成語大全網 - 書法字典 - protobuf使用中的問題和方法

protobuf使用中的問題和方法

在windows下使用protobuf,編譯成dll,提示如下錯誤(未解析外部符號?

?empty _ string _ once _ init _ @ internal @ proto buf @ Google @ @ 3HA(int Google::proto buf::internal::empty _ string _ once _ init _),

?empty _ string _ @ internal @ proto buf @ Google @ @ 3PBV?$basic_string@DU?$char_traits@D@std@@V?$ allocator @ D @ 2 @ @ STD @ @ B(class STD::basic _ string,class STD::allocator & gt;const * const Google::proto buf::internal::empty _ string _)

提示這兩個函數,通過用dumpbin查看libprotobufd.dll,這兩個函數被導出並最終在這裏找到。

回答

您需要將宏PROTOBUF_USE_DLLS添加到引用此dll的項目中。通過搜索protobuf項目,發現在定義了這個宏之後,在添加了這個宏之後,會有如下宏定義:

# define LIBPROTOBUF _ EXPORT _ _ declspec(dllimport)

加入pb後,您的項目中可能會出現數百個未定義的類型,但顯然這些類型是在您的項目中定義的。這時,可以考慮在其他頭文件之前添加pb消息的頭文件。

默認生成的xxx.pb.h,xxx.pb.cc的類在windows下沒有用symbol _dllexport修飾,所以不能在生成的dll中導出和使用。它們可以通過` protc-CPP _ out = DLLExport _ decl = MY_EXPORT_MACRO:path/to/output/dirmyproto . proto `來實現。然後在另壹個H文件中定義` MY _ EXPORT _ MACRO `宏,然後將其包含在所有頭文件中。