OpenMVS+Win10+VS2019+vcpkg编译及问题

2023-10-27

参考资料:
【1】OpenMVS——https://github.com/cdcseacave/openMVS
【2】https://blog.csdn.net/baidu_40840693/article/details/84707105

1 VS2019安装

安装VisualStudio2019 Community记得额外安装英文语言包,并设置默认语言为英语!!!!
Visual Studio2019下载地址
VS2019更改语言包

2 git安装

git for windows下载地址
https://git-scm.com/download/win
安装程序一路点next即可,记得将git安装地址添加到系统环境变量的path里。
环境变量

3 vcpkg安装

可参考以下博客,其中有更详细的vcpkg安装步骤。若懒得看,可以从下面3.1开始看
【1】Vcpkg C/C++库管理工具安装和使用教程(链接VS2019)https://blog.csdn.net/qq_41023270/article/details/109274433
【2】利用vcpkg安装CGAL

3.1下载vcpkg

推荐C盘新建文件夹dev,然后从github网址下载vcpkg或者直接git下载

cd C:\
mkdir dev
cd dev
git clone https://github.com/microsoft/vcpkg

3.2安装vcpkg

进入到vcpkg安装文件夹,运行bootstrap-vcpkg.bat

cd C:\dev\vcpkg
.\bootstrap-vcpkg.bat

由于网路问题这一步可能会失败,多试几次或者翻墙直到完成安装。
在这里插入图片描述
为了在Visual Studio中使用vcpkg,只需要进行一下操作,在之后的使用中就可以直接使用了(需要开启管理员权限),

vcpkg integrate install

在这里插入图片描述
链接成功,系统里所有C++编辑器都能与vcpkg建立链接了。

3.3 配置环境变量

在“系统变量 ”中,点击 “新建 ”,即可新建一个变量。

变量名:VCPKG_DEFAULT_TRIPLET
变量值:x64-windows

在这里插入图片描述
(PS:这是为了在vcpkg中安装各种库时默认选择x64版本)

4 Vcpkg下载OpenMVS依赖的三方库

在vpckg的安装目录(比如c:\dev\vcpkg)下输入安装命令:
我使用的安装命令为

vcpkg install zlib:x64-windows boost:x64-windows eigen3:x64-windows ceres:x64-windows opencv:x64-windows cgal:x64-windows glew:x64-windows glfw3:x64-windows

这里由于网络的原因会失败很多次,最好翻墙下载。 -。-

OpenMVS官方教程给出的示例如下:

#Make a toplevel directory for deps & build & src somewhere:
mkdir OpenMVS
cd OpenMVS
 
#Get and install dependencies using vcpkg;
#choose the desired triplet, like "x64-windows", by setting the VCPKG_DEFAULT_TRIPLET environment variable or by specifying it after each package:
vcpkg install zlib boost eigen3 ceres opencv cgal glew glfw3
 
#Get VCGLib (Required):
git clone https://github.com/cdcseacave/VCG.git
#Get and unpack OpenMVS in OpenMVS/src:
git clone https://github.com/cdcseacave/openMVS.git src
#Make build directory:
mkdir build
cd build
#Run CMake, where VCPKG_ROOT environment variable points to the root of vcpkg installation:
cmake . ..\src -G "Visual Studio 15 2017 Win64" -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%\scripts\buildsystems\vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows -DVCG_ROOT="..\VCG"
 
#Open the solution in MSVC and build it

5 下载和编译VCG和OpenMVS

从cmd进入需要下载和编译OpenMVS的文件夹,我的安装路径是F:\MVS_program\OpenMVS,git下载VCG和OpenMVS

cd F:\MVS_program\OpenMVS
git clone https://github.com/cdcseacave/VCG.git
git clone https://github.com/cdcseacave/openMVS.git src

5.1Cmake命令

cmake . ..\src -G "Visual Studio 16 2019" -A x64 -DCMAKE_TOOLCHAIN_FILE=C:\dev\vcpkg\scripts\buildsystems\vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows -DVCG_ROOT="..\VCG"

注意使用如下命令会出现错误

cmake . ..\src -G "Visual Studio 16 2019 Win64" -DCMAKE_TOOLCHAIN_FILE=C:\dev\vcpkg\scripts\buildsystems\vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows -DVCG_ROOT="..\VCG"

CMake Error: Could not create named generator Visual Studio 16 2019 Win64,把"Visual Studio 16 2019 Win64" 换成 “Visual Studio 16 2019” -A x64 就好了

5.2 Cmake成功

在这里插入图片描述

6 VS打开.sln生成

6.1 编译ReconstructMesh.exe出现错误**

unresolved external symbol “void __cdecl boost::throw_exception(class std::exception const &,struct boost::source_location const &)”
(?throw_exception@boost@@YAXAEBVexception@std@@AEBUsource_location@1@@Z)
referenced in function “unsigned int __cdecl boost::multiprecision::backends::eval_lsb(struct boost::multiprecision::backends::gmp_int const &)”
(?eval_lsb@backends@multiprecision@boost@@YAIAEBUgmp_int@123@@Z)

6.2分析

无法解析的外部符号 boost::throw_exception已在函数 boost::multiprecision::backends::eval_lsb(struct boost::multiprecision::backends::gmp_int const &)中定义。
查找到eval_lsb函数在"C:\dev\vcpkg\installed\x64-windows\include\boost\multiprecision\gmp.hpp"中

 inline unsigned eval_lsb(const gmp_int& val)
{
   int c = eval_get_sign(val);
   if (c == 0)
   {
      BOOST_THROW_EXCEPTION(std::domain_error("No bits were set in the operand."));
   }
   if (c < 0)
   {
      BOOST_THROW_EXCEPTION(std::domain_error("Testing individual bits in negative values is not supported - results are undefined."));
   }
   return static_cast<unsigned>(mpz_scan1(val.data(), 0));
}

然后查找到BOOST_THROW_EXCEPTION函数的定义在“C:\dev\vcpkg\installed\x64-windows\include\boost\throw_exception.hpp”

#define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x, BOOST_CURRENT_LOCATION)
namespace boost
{

#if defined( BOOST_NO_EXCEPTIONS )

BOOST_NORETURN void throw_exception(std::exception const& e); // user defined
BOOST_NORETURN void throw_exception(std::exception const& e, boost::source_location const& loc); // user defined 

#endif

throw_exception函数需要由用户定义,在OpenMVS的Common.cpp中重定义了该函数,这导致eval_lsb和重定义的函数冲突么?(求解答)

"......\OpenMVS\src\libs\Common\Common.cpp"
#ifdef _USE_BOOST
#ifdef BOOST_NO_EXCEPTIONS
namespace boost {
	void throw_exception(std::exception const & e) {
		VERBOSE("exception thrown: %s", e.what());
		ASSERT("boost exception thrown" == NULL);
		exit(EXIT_FAILURE);
	}
} // namespace boost
#endif
#endif

6.3 我的解决方法——取消宏定义BOOST_NO_EXCEPTIONS

在文件"~~\OpenMVS\src\libs\Common\Types.h"中取消宏定义BOOST_NO_EXCEPTIONS
在“#define BOOST_NO_EXCEPTIONS ”这句前面加上双斜杠"//"

改动前:

// include usual boost libraries
#ifdef _USE_BOOST
#if 1
// disable exception support
#define BOOST_NO_UNREACHABLE_RETURN_DETECTION
#define BOOST_EXCEPTION_DISABLE
#define BOOST_NO_EXCEPTIONS  
#endif

改动后:

//取消宏定义BOOST_NO_EXCEPTIONS 
// include usual boost libraries
#ifdef _USE_BOOST
#if 1
// disable exception support
#define BOOST_NO_UNREACHABLE_RETURN_DETECTION
#define BOOST_EXCEPTION_DISABLE
//#define BOOST_NO_EXCEPTIONS  
#endif

然后Debug和Release都编译通过了

6.4 其他方法

https://blog.csdn.net/jinguangliu/article/details/79561890

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenMVS+Win10+VS2019+vcpkg编译及问题 的相关文章

随机推荐

  • 大话数据结构 1 绪论

    数据 是描述客观事物的符号 是计算机中可以操作的对象 是能被计算机识别 并输入给计算机处理的符号集合 数据元素 是组成数据的 有一定意义的基本单位 在计算机中通常作为整体处理 也被称为记录 数据项 一个数据元素可以由若干个数据项组成 数据项
  • 25B无人直升机调试(Tuning)

    要知道的直升机原理 首先要掌握的5个飞行模式 本文首先调试自稳模式 Stabilize 自稳模式 Alt Hold 定高模式 Loiter OF loiter 悬停模式 RTL Return to Launch 返航模式 Auto 自动模式
  • jdbctypetimestamp,getTimestamp()在MySQL JDBC连接器中进行两次时区转换?

    I have a column of type DATETIME wiht a value of 2012 05 07 19 59 12 in MySQL database I m trying to retrieve this value
  • OpenCV-Python击中击不中变换案例:真图作核的绳网结匹配

    前往老猿Python博客 https blog csdn net LaoYuanPython 一 引言 在前面的博文介绍了HMT变换的基础知识及理解HMT变换的关键知识点以及长方形和绿叶边界的提取 本文将简单介绍另一个案例 绳网结匹配 老猿
  • 2023年Java毕业设计题目推荐,怎样选题?500道毕业设计题目推荐

    大家好 我是程序员徐师兄 最近有很多同学咨询 说毕业设计了 不知道选怎么题目好 有哪些是想需要注意的 今天 我整理了一些Java毕业设计的题目 可以参考一下 希望对大家有所帮助 文章目录 一 大体实现思路 二 如何避坑 三 可借鉴题目参考
  • 计算机中¥符号按哪个键,人民币键盘符号怎么打 电脑怎么打人民币符号

    原标题 小编教你电脑怎么打人民币符号 关于电脑问题教程分享 来源 191路由网 编辑 小元 对于财务人员来说 货币的符号熟悉程度已经是滚瓜烂熟了 特别对于人民币符号不仅要学会手写 在办公软件上还要知道怎么拼写出来 但是对于新手而已就需要学习
  • 关于在VMware上安装Android x86及FTP详细使用

    关于在VMware上安装Android x86产生的一系列问题及解决办法 下载地址 安装配置过程 配置磁盘 配置启动文件 关于分辨率问题 兼容ARM 输入法问题 FTP服务 打开FTP服务 搭建服务器 客户端连接 部分问题 结尾 下载地址
  • go 进阶 http标准库相关: 三. HttpServer 服务启动到Accept等待接收连接

    目录 一 http ListenAndServe 服务启动基础概述 二 Server 结构体详解 三 查看Server Serve ln 源码 连接的state状态 四 Listener Accept 等待连接 问题 六 总结 引出一个小问
  • TARS快速入门(NodeJs)

    1 前言 一个NodeJs应用程序框架需要关注很多问题 如自动发布 多机部署 负载均衡 监控报警 日志的输出与管理 服务异常重启等等 而Tars应用程序框架就提供了解决这些问题的一整套方案 Tars是腾讯从2008年到今天一直在使用的后台逻
  • mysql column_MySQL,`column` like '一些文字' 是否就等于 `column` = '一些文字',有什么区别是呢?...

    建议你用 EXPLAIN 语句来检查一下这两条语句的的执行结果 下面是我在自己机器上用 phpMyAdmin 的性能分析工具做的测试 第一条 SELECT FROM Affiliate Impression Log WHERE Produc
  • 【C++】CGAL学习笔记

    一 HELLO WORLD 1 官方文档 CGAL TUTORIALS 2 所有 CGAL 头文件都在子目录中 所有 CGAL 类和函数都在命名空间中 类以大写字母开头 全局函数以小写字母开头 常量全部大写 3 几何图元 如点 线等都定义在
  • Oracle transport tablespace

    本来没想过发布这个文章 只是周边有一朋友工作中遇到合并数据库的情况 他是通过expdp提取出五个库对象 然后impdp到新库里面 我觉得这种方法特别耗时 尤其在数据量比较大的时候 这种时候我觉得采用表空间传输方法效率更高点 当然我们还可以使
  • 【JAVA定时器】四种常见定时器的原理和简单实现

    个人学习笔记分享 当前能力有限 请勿贬低 菜鸟互学 大佬绕道 如有勘误 欢迎指出和讨论 本文后期也会进行修正和补充 前言 定时器顾名思义 即定时触发某个事件 分离开来 即包含三个因素 定时 触发 某个事件 本文也将以此为基础介绍五种常见的定
  • centos7 iptables 安装与添加端口

    1 安装 systemctl stop firewalld systemctl mask firewalld yum install iptables services 2 开机启动 systemctl enable iptables 3
  • java中 所有事件侦听器接口(总结)

    所有事件侦听器接口必须扩展的标记接口 是 public interfaceEventListener 1 public interface ActionListener extends EventListener 用于接收操作事件的侦听器接
  • Win32:一个全新的、被忽视的桌面互联网内容平台

    Microsoft 成于Win32 败于Win32 回归Win32 纵观微软的历史 毫无疑问 桌面应用的黄金时代Win32造就了微软庞大的应用生态 进而奠定了曾经的王者 当互联网逐步成为主流的时候 应用生态逐渐发生了变化 这种变化日积月累
  • Ubuntu系统上切换到root用户的多种方法

    在Ubuntu系统上切换到root用户是在进行系统管理和配置时经常需要的操作 通过切换到root用户 您可以获得管理员权限 执行需要特殊权限的任务 在本文中 我们将参考以下文章 https www howtouseubuntu com au
  • 可验证随机函数VRF之Algorand算法

    原文链接 https zhuanlan zhihu com p 29429006 DFINITY的阈值接力结构与可验证随机函数 VRF 密切相关 VRF算法作为一种基于密码学的新型共识模型被提出 最大的优势是快速共识 抗攻击能力 极低算力需
  • Spring boot入门级开发

    现在好多人都是用IDEA开发 好多Spring boot的案例也都是IDEA工程 喜欢用传统Eclipse开发的朋友们就尴住了 那么 小生不才 给大家带来一篇基于Eclipse开发Spring boot的案例 我们都知道Eclipse是一个
  • OpenMVS+Win10+VS2019+vcpkg编译及问题

    Win10 VS2019 OpenMVS1 1 1 Vcpkg 1 VS2019安装 2 git安装 3 vcpkg安装 3 1下载vcpkg 3 2安装vcpkg 3 3 配置环境变量 4 Vcpkg下载OpenMVS依赖的三方库 5 下