colmap編譯過程中出現,無法解析的外部符號錯誤 “__cdecl google::base::CheckOpMessageBuilder::ForVar1(void)”


錯誤提示:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM