錯誤提示:
1>colmap.lib(matching.obj) : error LNK2019: 無法解析的外部符號 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > * __cdecl google::base::CheckOpMessageBuilder::ForVar1(void)" (__imp_?ForVar1@CheckOpMessageBuilder@base@google@@QEAAPEAV?$basic_ostream@DU?$char_traits@D@std@@@std@@XZ),該符號在函數 "private: virtual void __cdecl colmap::TransitiveFeatureMatcher::Run(void)" (?Run@TransitiveFeatureMatcher@colmap@@EEAAXXZ) 中被引用 1>colmap.lib(graph_cut.obj) : error LNK2001: 無法解析的外部符號 "__declspec(dllimport) public: class std::basic_ostream<char,struct std::char_traits<char> > * __cdecl google::base::CheckOpMessageBuilder::ForVar1(void)" (__imp_?ForVar1@CheckOpMessageBuilder@base@google@@QEAAPEAV?$basic_ostream@DU?$char_traits@D@std@@@std@@XZ)
具體為,鏈接時,出現無法解析的外部符號:
class std::basic_ostream<char,struct std::char_traits<char> > * __cdecl google::base::CheckOpMessageBuilder::ForVar1(void)"
(__imp_?ForVar1@CheckOpMessageBuilder@base@google@@QEAAPEAV?$basic_ostream@DU?$char_traits@D@std@@@std@@XZ)
解決方法:
在引用google::base::CheckOpMessageBuilder::ForVar1(void)這個函數的庫、EXE的預處理上定義:
GOOGLE_GLOG_DLL_DECL=
對於colmap項目來說,就是在colmap庫,colmap_exe項目上,分別添加。
總結:
如果有一個解決方案,里面有A, B, Z三個項目,A, B為庫,Z為EXE, B, Z 分別引用了第三方的庫glob。則在添加預定義的 GOOGLE_GLOG_DLL_DECL= 時,B, Z均需添加。
而且,在編譯過程中,B不會出現編譯錯誤,在生成.lib時也不會報錯錯誤,但當Z鏈接A, B 生成二進制可執行文件時,才會報錯。
參考:
安裝ceres-solver win10遇到Eigen安裝的問題,woodseye,18.8