win10+vs2017+vcpkg 配置colmap3.6
配置前关键提醒
colmap依赖众多的c++库,且库之间有版本隔离,建议使用ubuntu配置学习colmap,如果非要使用win下的colmap,请暂时不要选择vs2019,尝试vs2019配合vcpkg未成功,vcpkg截至博客撰写时仍然有很多坑,依然选择vcpkg配置的重要原因是colmap依赖众多,配置错误无法确定是否为库间版本隔离导致。
vcpkg配置
按colmap文档提示,在windows PowerShell中执行如下命令,下载和配置vcpkg,
// On Windows
git clone https://github.com/microsoft/vcpkg
cd vcpkg
.\bootstrap-vcpkg.bat
若配置中出现问题,需要将vs2017中语言增加英语,具体操作是到控制面板中卸载vs2017,在如下页面中选择修改,增加英语语音即可。
安装colmap依赖项
执行如下命令,下载和编译colmap依赖项目,
// On Windows
.\vcpkg install colmap[cuda,tests]:x64-windows
这里需要特别注意:vcpkg会自动下载并使用vs2017编译器编译64位colmap依赖项,需要保持网速流畅,且链接外网,在学校中我选择本科生上课的时间段配置,vcpkg下载经常中断,尤其是在下载boost相关文件时,下载失败时常有的事情,当powershell中提示下载失败时,将下载网页复制到链接外网的浏览器中直接下载,下载文件放置在vcpkg->downloads文件夹中,再次执行:
// On Windows
.\vcpkg install colmap[cuda,tests]:x64-windows
CUDA安装
cuda的安装版本是在vcpkg安装的过程中确定的,当vcpkg安装依赖项的过程中,会提示cuda的安装,按照安装提示,在cuda官网下载相应版本的cudatoolkit进行安装,安装选择自定义安装方式,具体参考这篇博客。
vs2017编译colmap
按如下流程并未成功的编译colmap3.6源代码,后使用cmake手动组织colamp程序,vs2017进行编译。
run ./vcpkg integrate install
.\vcpkg install colmap[cuda,tests]:x64-windows
cd D:\Reconstruction\code\colmap
mkdir build
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=D:/VCPCGINSTALL/vcpkg2017/scripts/buildsystems/vcpkg.cmake
cmake --build . --config release --target colmap_exe --parallel 24
在colmap github下载colamp3.6源码,解压后修改最外层CMakeLists.txt文件,增加SET(CMAKE_TOOLCHAIN_FILE “D:/VCPCGINSTALL/vcpkg2017/scripts/buildsystems/vcpkg.cmake”)语句用于指导cmake在指定路径下寻找vcpkg中配置的库文件和头文件。
cmake_minimum_required(VERSION 3.0)
SET(CMAKE_TOOLCHAIN_FILE "D:/VCPCGINSTALL/vcpkg2017/scripts/buildsystems/vcpkg.cmake")
project(COLMAP)
set(COLMAP_VERSION "3.6")
set(COLMAP_VERSION_NUMBER "3600")
vcpkg中自动配置编译的CGAL不能满足colmap6.3的需求,并未安装gmp库,在vcpkg中手动安装gmp库发生库依存错误,如下图所示,mipr和gmp库不能同时存在,索性直接下载cgal安装包,手动编译cgal库,这里我使用cgal版本是4.12。
安装cgal后,在cgal目录中建立build文件夹,cmake组织cgal(如下图)使用vs2017编译。注意:使用管理员模式打开vs2017,分别生成release和debug下的ALL_BUILD和INSTALL部分。
打开cmake组织vs程序,如下图中所示,关于cgal的部分换成自己手动编译的库和头文件。直接configure和generate即可。
vs2017打开colmap进行编译,我这里编译过程中出现一处错误如下所示,这里添加mpir.lib路径到colmap_exe项目的附加依赖项中即可解决。
D:\VCPCGINSTALL\vcpkg2017\installed\x64-windows\lib\mpir.lib
debug编译时出现应用程序无法正常启动0xc000007b错误提示,这里需要把提示的dll文件放置在colamp执行目录下,放错同名文件导致的程序报错,这对我的配置问题,将libgmp-10.dll文件从自己配置的cgal中拷贝到colmap执行目录下即可解决。