• 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

  • 相关阅读:
    Linux系统:Centos7搭建Redis单台和集群环境
    Linux系统:Centos7安装Jdk8、Tomcat8、MySQL5.7环境
    Linux系统:常用Linux系统管理命令总结
    转--->svn的使用
    开发中常见的问题
    1.NSThread
    用NSOperation和NSOperationQueue实现多线程编程
    很实用的时间比对算法
    简单的IOS6和IOS7通过图片名适配
    nginx完美支持tp框架
  • 原文地址:https://www.cnblogs.com/arxive/p/11854217.html
Copyright © 2020-2023  润新知