编译环境
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的过程,如有不当,还请理解与指正。
转载请注明出处!