?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 `宏,然後將其包含在所有頭文件中。