我遇到同樣的問題,因爲這裏所說的發現: Protobuf - Refuses to link vs2013 or vs2015`__declspec(dllexport)的EXTERN的std :: string foo的;`不連接
我想通了,這兩條線在generated_message_util.h可能造成這個問題:
__declspec(dllexport) extern const ::std::string* empty_string_;
__declspec(dllexport) extern ProtobufOnceType empty_string_once_init_;
參見:https://github.com/google/protobuf/blob/master/src/google/protobuf/generated_message_util.h#L80
我沒有那麼細化熟悉的關鍵字extern
,但最後爲L試圖使用該libarary的inker無法找到這些變量的兩個定義,這些變量在generated_message_util.cc中完成。
const ::std::string* empty_string_;
GOOGLE_PROTOBUF_DECLARE_ONCE(empty_string_once_init_);
void InitEmptyString() {
empty_string_ = new string;
...
}
參見:https://github.com/google/protobuf/blob/master/src/google/protobuf/generated_message_util.cc#L51和以下行。
有人知道這個問題有一個很好的解決方法,有這些信息嗎?
固定。最初有反向描述... – grek40
'LIBPROTOBUF_EXPORTS'和 'PROTOBUF_USE_DLLS'是在庫項目預處理器設置中定義的。使用這個lib的應用程序沒有定義它們。 –
@MatthiasLochbrunner那麼你的問題標題沒什麼意義......除非定義了「PROTOBUF_USE_DLLS」和「LIBPROTOBUF_EXPORTS」,否則'LIBPROTOBUF_EXPORT'不應該展開爲'__declspec(dllexport)'。請重新檢查。 – grek40