win10+VS2013编译COLMAP

编译环境

Windows10+VS2013+cmake3.17+Boost1.67+CUDA10.2+QT5.9.0+Ceres+CGAL4.14.3 

参考文章

文1:cmake版https://blog.csdn.net/Z5122/article/details/84197127

文2:python版https://blog.csdn.net/any_howe/article/details/83106940

colmap下载地址https://github.com/colmap/colmap,colmap官方文档https://colmap.github.io/install.html

各种软件与库的下载与编译参考以上参考文章。一开始参考的是文2,使用python进行编译,但尝试了几次都失败了。后面换用了cmake,也就是文1的作者所采用的方式。

下面主要讲一下我遇到的问题。

依赖项

首先是依赖项,按照官方文档所说,CUDA和CGAL是可选项。所有你可以选择不安装CUDA和CGAL。我试过不装CGAL的,那么后面编译好的colmap中会有部分功能不支持。

我的电脑中之前就有VS2013+CUDA10.2+QT5.9.0+Ceres以及python,省了不少工作。所以这部分的问题这篇文中是不会提到的。

1.Boost

建议直接下载预编译版本,选择自己对应编译器和操作系统位数的版本。我下载的是1.67版,VS2013编译的64位。对应的名称是:boost_1_67_0-msvc-12.0-64.exe。

下载以后根据提示安装就好,我安装在D:\mylib\boost_1_67_0,下图标记的是对应版本的lib库。

有的文章中提到要对Boost编译(即使是通过编译版安装的),但我试了之后,觉得不需要这样做。

 

2.CGAL

CGAL的配置给我后面带来了很大的困扰。文1作者好像也没有使用CGAL。

首先下载CGAL,我下载的是CGAL-4.14.3-Setup.exe。

然后进行安装,我安装的路径:

然后添加环境变量:

到这里还没完事,还需要编译。

按照文2作者与官方说明,我将源目录设置为D:\Program Files\dev\CGAL,build路径设置为D:\Program Files\dev\CGAL\build。我编译好了,使用vs生成也全部通过了。这个时候是将路径D:\Program Files\dev\CGAL\build\bin添加到path。我照做了,但不知道后面为什么还是有问题(后面会提到)。

对这里的路径添加我有点迷,因为后面编译colmap时添加是D:\Program Files\dev\CGAL,使用cmake编译时,cmake好像也没调用重新编译好之后的lib。

下面说一下我最终的配置方式,cmake编译阶段,我修改了build的路径,我直接设置为D:\Program Files\dev\CGAL,也就是和源目录一样。然后使用vs2013打开CGAL.sln,对ALL_BUILD在debug和release下都生成一遍。之后在源目录会多出一个bin文件夹。

lib文件下的文件也有所变化,一开始好像只有一个cmake文件夹,编译后:

然后将bin路径添加到环境变量,我把lib路径也加进去了。

为了确认CGAL确实配置好了,用它自带的示例测试了一下(建议测试一下,这里没配好会影响后面)。在examples文件下有测试用例,选择一个用cmake编译,然后用vs打开.sln,运行一下(这一部分可以上网查一查)。

 

编译colmap

到这里,前面的环境都配置好了,步骤还是挺多挺麻烦的。

1.cmake编译colmap

其中用到的库FreeImage、glew2.1.0来源于文1作者。

(1)选好源文件路径和build路径,点击configure,选择vs2013 x64。

(2)出现第一个问题,找不到Eigen3

手动将路径添加进去

同时修改cmake_install_prefix路径,也可以选择不修改。然后点击configure,继续编译。

(3)boost

boost库找不到的问题,我一开始使用的是低版本的cmake3.9,所以这一步出现了问题,当时是一个个将库路径添加进去的。后来换用了高版本的cmake3.17就没有这个问题了。参考我的另一文章https://blog.csdn.net/li_melon/article/details/106061792

(4)FreeImage

手动添加路径,然后点击configure,继续编译。

(5)glew2.1.0

手动添加路径,然后点击configure,继续编译。

(6)此时已经没有报错了,这里添加一项GFLAGS_INCLUDE_DIRS,定位到自己的gflags路径。然后点击configure,继续编译。

(7)编译,直到未出现红色标记项,Configuring done。然后Generate即可。

2.vs2013编译阶段

(1)使用vs打开之前build路径下的COLMAP.sln。

(2)分别在Debug和Release模式下对ALL_BUILD及INSTALL进行编译。

(3)出现错误“节数超过对象文件格式限制: 请使用 /bigobj 进行编译”

发现是colmap项目报错,导致未生成colmap.lib,也就引发了下面的LINK错误。所以先对colmap项目属性进行修改。

选择属性,C/C++选项,选择命令行,下方输入/bigobj。应用确定即可。然后生成colmap。

(4)colmap生成没问题之后,再次点击生成解决方案(ALL_BUILD)。

这次很顺利,成功了。

之前遇到的问题

提一下前几次用vs编译遇到的问题(可能是因为前几次各种操作不当引起的)。

(1)error C2057: 应输入常量表达式      utils.h        55        1        colmap

然后我就把这里直接改为24.0f,编译通过了,但是最终的colmap运行不起来。经过几次编译,发现好像是我CGAL没配好的原因,因为在没有加入CGAL编译的情况下,一样的代码,这里没有报错,只要我一加入CGAL,这里就报错了。

(2)error C1083: 无法打开包括文件: “cuda_runtime.h”: No such file or directory  cuda.cc    38     1    colmap_sources。

提醒一下好像不需要对colmap_sources项目编译,我之前傻傻的对这部分进行编译,出现了各种问题,““cuda_runtime.h”: No such file or directory”就是其1。这个问题还好,直接找到你电脑中的“cuda_runtime.h”文件所在路径(一般在CUDA安装目录下),将该路径添加到colmap_sources项目的附加包含目录。

(3)还有就是出现如下问题,好像是cmake阶段添加boost静态库时添加错了(这个应该是我使用低版本的cmake进行手动添加库时出现的问题,换用高版本的之后没有报这类错误。主要是在boost静态库中有两类lib,一种是libboost,一种是boost。所以一开始我也不知道应该添加哪个。

改一下:

(4)还有可能出现找不到gflags的问题,在相应项目中的附加包含目录中添加gflags的include路径即可。

 

3.完结

在vs下对INSTALL进行生成之后,在cmake阶段所选的cmake_install_prefix路径下:

点击COLMAP.bat运行。如果出现找不到FreeImage.dll和glew32.dll的提示,将这两个dll(参见cmake阶段添加相应库的路径)复制到当前文件夹下。

正常运行

 

以上仅为个人记录编译colmap的过程,如有不当,还请理解与指正。

转载请注明出处!

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值