• bundler-sfm windows下编译过程中出现的错误


    一、“sysdep1.h”文件缺失

    错误提示:

    fatal error C1083: 无法打开包括文件: “sysdep1.h”: No such file or directory

    这些作为这个软件的bug, 不需要太清楚为什么造成这种错误。只需要更正过来即可。你的经历应该放在对算法的理解上去。

    解决方法:

    在bundler源码根目录下的libf2c中:

    1>将sysdep1.h0文件名修改为sysdep1.h

    2>将signal1.h0文件名修改为signal1.h

    3>新建一个arith.h文件(创建头文件头只需将文件名定义为arith),这本身是个头文件(注意区别里面的cpp文件),在文件里添加如下内容即可:

    #define IEEE_8087
    #define Arith_Kind_ASL 1
    #define Long int
    #define Intcast (int)(long)
    #define Double_Align
    #define X64_bit_pointers
    #define QNaN0 0x0
    #define QNaN1 0xfff80000

    二、<hash_map> is deprecated and will be REMOVED

    提示:

    hash_map(17): fatal error C1189: #error:  <hash_map> is deprecated and will be REMOVED. Please use <unordered_map>. You can define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS to acknowledge that you have received this warning.

    原因:

    正如所提示的那样,是static assertion failed with "<hash_map> is deprecated and will be REMOVED.

    解决方法:

    1、在bundler的项目属性下,增加一个定义, /D _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 。(推荐)

    2、在使用include<hash_map>之前,加上#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS定义。(不推荐,比较繁复。)

    3、使用unordered_map代替hash_map

    以上三种方法任选其一。

    三、“int32_t”: 重定义

    错误提示:

    srcinclude	ypes.h(6): error C2371: “int32_t”: 重定义;不同的基类型

    解释:

    源码中的include ypes.h里的ypedef signed long int32_t定义,与

    Microsoft Visual Studio2017EnterpriseVCToolsMSVC14.16.27023includestdint.h

    中的int32_t定义冲突了,而且其实也不是一个含义。

    解决:

    将typedef signed long int32_t这个定义中的int32_t,改为int32_st。并修改VS解决方案里的所有引用。

    四、“_isnan”: 不是“std”的成员

    提示:

    undleadd.cpp(352): error C2039: “_isnan”: 不是“std”的成员

    解决:

    去掉_isnan前面的std::即可。

    五、无法解析的外部符号GetVectorIntersection

    提示:

    1>BaseGeometry.obj : error LNK2019: 无法解析的外部符号 "class std::vector<int,class std::allocator<int> > __cdecl GetVectorIntersection(class std::vector<int,class std::allocator<int> > const &,class std::vector<int,class std::allocator<int> > const &)" (?GetVectorIntersection@@YA?AV?$vector@HV?$allocator@H@std@@@std@@ABV12@0@Z),该符号在函数 "public: bool __thiscall BaseApp::ImagesPartOfPanorama(int,int)" (?ImagesPartOfPanorama@BaseApp@@QAE_NHH@Z) 中被引用
    1>ImageData.obj : error LNK2001: 无法解析的外部符号 "class std::vector<int,class std::allocator<int> > __cdecl GetVectorIntersection(class std::vector<int,class std::allocator<int> > const &,class std::vector<int,class std::allocator<int> > const &)" (?GetVectorIntersection@@YA?AV?$vector@HV?$allocator@H@std@@@std@@ABV12@0@Z)
    1>MatchTracks.obj : error LNK2001: 无法解析的外部符号 "class std::vector<int,class std::allocator<int> > __cdecl GetVectorIntersection(class std::vector<int,class std::allocator<int> > const &,class std::vector<int,class std::allocator<int> > const &)" (?GetVectorIntersection@@YA?AV?$vector@HV?$allocator@H@std@@@std@@ABV12@0@Z)
    1>BundleIO.obj : error LNK2019: 无法解析的外部符号 "bool __cdecl FileExists(char const *)" (?FileExists@@YA_NPBD@Z),该符号在函数 "public: void __thiscall BaseApp::ReadCameraConstraints(void)" (?ReadCameraConstraints@BaseApp@@QAEXXZ) 中被引用
    1>BundlerGeometry.obj : error LNK2001: 无法解析的外部符号 "bool __cdecl FileExists(char const *)" (?FileExists@@YA_NPBD@Z)
    1>ImageData.obj : error LNK2001: 无法解析的外部符号 "bool __cdecl FileExists(char const *)" (?FileExists@@YA_NPBD@Z)
    1>BundlerApp.obj : error LNK2019: 无法解析的外部符号 "void __cdecl Tokenize(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?Tokenize@@YAXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@2@0@Z),该符号在函数 "public: virtual void __thiscall BundlerApp::ProcessOptions(int,char * *)" (?ProcessOptions@BundlerApp@@UAEXHPAPAD@Z) 中被引用
    1>ImageData.obj : error LNK2001: 无法解析的外部符号 "void __cdecl Tokenize(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?Tokenize@@YAXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AAV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@2@0@Z)
    1>BundleTwo.obj : error LNK2019: 无法解析的外部符号 "void __cdecl generate_permutation(int,int *)" (?generate_permutation@@YAXHPAH@Z),该符号在函数 "void __cdecl PermuteMatches(class std::vector<class KeypointMatch,class std::allocator<class KeypointMatch> > &)" (?PermuteMatches@@YAXAAV?$vector@VKeypointMatch@@V?$allocator@VKeypointMatch@@@std@@@std@@@Z) 中被引用
    1>ImageData.obj : error LNK2019: 无法解析的外部符号 "struct img_t * __cdecl RescaleImage(struct img_t *,int,double &)" (?RescaleImage@@YAPAUimg_t@@PAU1@HAAN@Z),该符号在函数 "public: void __thiscall ImageData::LoadThumb256(void)" (?LoadThumb256@ImageData@@QAEXXZ) 中被引用
    1>ImageData.obj : error LNK2019: 无法解析的外部符号 "void __cdecl GetRotationFromSpherical(double,double,double *)" (?GetRotationFromSpherical@@YAXNNPAN@Z),该符号在函数 "public: void __thiscall ImageData::DetectLineSegments(double,double,double,double)" (?DetectLineSegments@ImageData@@QAEXNNNN@Z) 中被引用
    1>E:Projsalgsundlersrcvc++DebugBundler.exe : fatal error LNK1120: 6 个无法解析的外部命令

    问题剖析:

    这种无法识别的外部符号,是VS编译过程中常见的错误。解决思路一般为:

    检查第三方库的lib是否Debug、Release、x86、x64 版本正确;

    检查是否引用了合适的lib库;

    检查当前项目中,自己定义的类库中,是否仅仅加入VS Project的仅有xxx.h文件,而没有.cpp文件。

    而此处出现的错误,就是属于最后面的那一种情况。将srcBundleUtil.cpp找到,并加入Bundler中。

    参考

    windows7下实现Bundler,PMVS,CMVS在VS2010/VS2013上的编译并通过cygwin运行(1). 2016.11

    VS2015静态断言失败How to fix hash_map is deprecated and will be REMOVED,2019.6

  • 相关阅读:
    [leetcode]Reverse Words in a String
    *[topcoder]ChooseTheBestOne
    priority_queue c++
    [topcoder]BoxesDiv2
    *[topcoder]IncrementingSequence
    [topcoder]HappyLetterDiv2
    c++ stl 使用汇总(string,vector,map,set)
    2014找工作总结-机会往往留给有准备的人 (转,后台开发面经)
    2015互联网校招总结—一路走来 (移动端开发面经,另有面经汇总)
    通过金矿模型介绍动态规划(转)
  • 原文地址:https://www.cnblogs.com/arxive/p/11783646.html
Copyright © 2020-2023  润新知