bundler-sfm windows下编译过程中出现的错误
一、“sysdep1.h”文件缺失
错误提示:
fatal error C1083: 无法打开包括文件: “sysdep1.h”: No such file or directory
这些作为这个软件的bug, 不需要太清楚为什么造成这种错误。只需要更正过来即可。你的经历应该放在对算法的理解上去。
解决方法:
在bundler源码根目录下的\lib\f2c中:
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”: 重定义
错误提示:
src\include\types.h(6): error C2371: “int32_t”: 重定义;不同的基类型
解释:
源码中的include\types.h里的ypedef signed long int32_t定义,与
Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\include\stdint.h
中的int32_t定义冲突了,而且其实也不是一个含义。

解决:
将typedef signed long int32_t这个定义中的int32_t,改为int32_st。并修改VS解决方案里的所有引用。
四、“_isnan”: 不是“std”的成员
提示:
\bundleadd.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:\Projs\algs\bundler\src\vc++\Debug\Bundler.exe : fatal error LNK1120: 6 个无法解析的外部命令
问题剖析:
这种无法识别的外部符号,是VS编译过程中常见的错误。解决思路一般为:
检查第三方库的lib是否Debug、Release、x86、x64 版本正确;
检查是否引用了合适的lib库;
检查当前项目中,自己定义的类库中,是否仅仅加入VS Project的仅有xxx.h文件,而没有.cpp文件。
而此处出现的错误,就是属于最后面的那一种情况。将src\BundleUtil.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
bundler-sfm windows下编译过程中出现的错误的更多相关文章
- windows下编译java源文件的编码错误
import java.util.Arrays;public class ArrayAsAReference{ public static void main(String[] args) { int ...
- GDAL库简介以及在Windows下编译过程
GDAL(Geospatial Data Abstraction Library,地理空间数据抽象库)是一个在X/MIT许可协议下的开源栅格空间数据转换库.官网http://www.gdal.org/ ...
- windows下编译Hugin时的template错误
Hugin依赖于VIGRA,而VIGRA包含大量的模板,编译Hugin是出现如下的大量错误: "unexpected token(s) preceding ':'; skipping app ...
- FormatMessage与GetLastError配合使用,排查windows api调用过程中的错误
前一段时间在学习windows api调用过程中,遇到过一些调用错误或者程序没能显示预期的结果,或者直接出现vc运行时错误. 这对新手来说是司空见惯的事,因为不太熟悉难免会出错,出错的信息如果能显示很 ...
- 编译过程中,termcap.h 文件找不到路径 licli.a终于生成
编译过程中,termcap.h 文件找不到路径 查看是linux 源码下找不到termcap.h文件 安装了所有关于*cap*的源码包也不起作用 今天终于解决了这个问题,搜 ...
- Windows下编译objective-C
Windows下编译objective-C 2011-08-31 14:32 630人阅读 评论(0) 收藏 举报 windowscocoa工具objective clibraryxcode 目录 ...
- 在Windows下编译FFmpeg详细说明
MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNC工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时 MinGW,即 Minimalist GNU F ...
- 在Windows下编译OpenSSL(VS2005和VC6)
需要说明的是请一定安装openssl-0.9.8a . openssl-1.0.0我没有编译成功. 如何在Windows下编译OpenSSL (Vs2005使用Vc8的cl编译器)1.安装Activ ...
- 一步步实现windows版ijkplayer系列文章之四——windows下编译ijkplyer版ffmpeg
一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...
随机推荐
- vue-router有哪几种导航钩子 keep-alive的详细用法 解决跨域
1===>vue-router有哪几种导航钩子? 第一种:是全局导航钩子:router.beforeEach(to,from,next) 第二 ...
- Ubuntu下搭建Kubernetes集群(1)--安装docker
可以使用物理机,也可以使用虚拟机. 首先参考https://docs.docker.com/install/linux/docker-ce/ubuntu/ 官方文档学会安装docker. 1.首先移除 ...
- Spring(004)-Bean装配
一,问题,Bean找不到 代码 @Component public class DemoClass { public int doSth() { ; } } 测试代码 @RunWith(SpringJ ...
- 201871010126 王亚涛 《面向对象程序设计 Java》 第十五周学习总结
内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11 ...
- 429 too many requests错误出现在wordpress后台更新及官网的5种解决方法
从今年10月份开始wordpress服务经常出现429 too many requests错误,包括后台更新和访问wp官网,如下图所示,这是为什么呢?怎么处理呢?有大佬向官方论坛提问了,论坛主持人Ja ...
- workerman docker 运行试用
看到别人项目使用了workerman 作为webserver ,看了下介绍发现此框架还是挺强大的,比较喜欢使用 docker运行软件,所以基于php 7.3 的基础镜像简单使用下 环境准备 项目使用了 ...
- nexus php composer host 模式repo 试用
前边有介绍以及运行过基于nexus proxy 模式的php composer(其中也有一些坑),以下是关于host 模式的 简单使用 环境准备 docker-compose 文件 version ...
- 前端Vue项目——初始化及导航栏
一.项目初始化 创建webpack模板项目如下所示: MacBook-Pro:PycharmProjects hqs$ vue init webpack luffy_project ? Project ...
- 关于指针与引用的差别——C++
准备 https://zhuanlan.zhihu.com/p/27974028 开始 int 是int类型变量声明 int * 是int指针声明,指针其实就是地址变量,用来储存地址值的" ...
- mac生成iOS证书(配图)
当我们完成一个APP的时候,需要发布到各大平台让用户下载.而iOS用户是一个不可忽视的群体. 想要在 App Store发布APP,总结了下需要三个步骤. 第一步生成APPID. 第二步生成证书 ce ...