1、cmake安装
2、VS2019(我用的是vs2022)环境变量
作者写了这句话:(下面截图)这个cl.exe是编译器版本的意思
详解 Visual Studio、MSVC、编译器版本,看完就不再困惑啦!_msvc版本-优快云博客 (详细介绍编辑器相关知识)
2.1、VS修改英文环境(方便vcpkg)(其实可以不用 中文最后也能用vcpkg)
3:nvidia和cudn
输入Nvidia-smi和nvcc -V看看就行
这里一定要和vs的版本对应上,详细请往下翻看,比如cuda12.5支持vs2022的17.12
4:cgal(可以不用手动安装,这步完全跳过)
5:vcpkg下载安装使用
1.下载安装: git clone GitHub - microsoft/vcpkg: C++ Library Manager for Windows, Linux, and MacOS
2.运行bootstrap-vcpkg.bat下载vcpkg.exe
3、运行验证:在当前页面下 按住shift打开powershell终端
然后输入 ./vcpkg(也可以直接vcpkg)(如果是cmd就是输入vcpkg cmd不要./)
4、进行测试,是否成功安装(安装OPENSSL测试)
./vcpkg install openssl --triplet=x64-windows
这里是下载包的地址
我们还可以将其添加到环境下,这样就不用来到这里才能vcpkg了 直接cmd桌面就行
现在有问题 我写这样的代码,是不可以运行的,因此需要对所有以后的代码进行修改。
vcpkg install zlib:x64-windows # 不可以
vcpkg install zlib --triplet=x64-windows # 可以
这个问题最后是这样解决的,这是因为在系统环境变量中,我写错了文字:
我在系统变量里改了名字,为
VCPKG_DEFAULT_TRIPLET 这个值是x64-windows
而我写成了x64_windows
因此才会有如下错误:
原因就是当时写为了x64_windows,所以才给我一直报错
补充知识:
①Vcpkg可以用国内源,但是我没用,我有vpn哈哈哈,不过不连接网络似乎也可以
②用“vcpkg install name(包名)”默认下载的是x86包,在x64系统上不能运行,因此需要三元指定--triplet=x64-windows
③查看已经下载的库 vcpkg list
④搜索网上的这个库 这样还可以看看版本号 比如下面的vcpkg search opencv
那么怎么指定呢 这个详细见vcpkg专题
⑤删除已经下载的库 vcpkg remove xx --triplet=x64-windows 还得加上三元,要不然又报错,然后这个命令删除的时候 由于很多库之间有依赖 因此这样的话其实会报错不让你删掉,报错如下:
因此我们需要改为 vcpkg remove zlib --triplet=x64-windows --recurse
加上--recurse 选项来递归删除这些库及其依赖项,但实际上我们可能是只想删这个,因此其他的我还要下载回来,比如opencv4,所以删除了包之后,我需要再下回来
vcpkg install libpng opencv4 tiff --triplet=x64-windows
这种方法可以让你删除 zlib,而不会影响其他已安装的库(remove的移除也只是移除了二进制程序库而已,源码包和解压缩的源码并没有删除 因此上图重新安装非常快)
5.5在vs中使用vcpkg
1、首先建议每次使用vcpkg都先初始化一下(作为更新):./bootstrap-vcpkg.bat
5:vcpkg安装集成好的colmap
(1)vcpkg install cgal:x64-windows
(2)vcpkg install freeimage:x64-windows
(3)vcpkg install glew:x64-windows
(4)vcpkg install boost:x64-windows
(5)vcpkg install ceres[suitesparse,cxsparse]:x64-windows #时间1.8h
(6)vcpkg install flann:x64-windows
(7)vcpkg install qt5:x64-windows #时间42min
(8)vcpkg install metis:x64-windows
(9)vcpkg install eigen3:x64-windows
(10)vcpkg install glfw3:x64-windows
(11)vcpkg install poselib:x64-windows
(12)vcpkg integrate install
安装cgal的时候,必须开外网,否则cgal依赖boost时候,他会下载不下来boost。
Boost下载时间非常长,会一直卡着不动,这是后可以在powershell按按上下左右,有大概率机会他会跳一下。但是实际上放着就可以了,时长如下:1.8h
下载完这些之后,可以下载最后的别人做好的colmap了
(7) vcpkg install colmap[cuda,tests]:x64-windows
但是这里非常值得强调,这里可能会给一些错误,如下显示,这是因为我们的cuda其实要和vs2022的版本要对应上,否则编译会出问题,我们来到下面的官网发现,对于Vs2022 17.12版本,需要cuda12.5才能满足,所以这个问题解决了,colmap安装才能成功
CUDA Installation Guide for Microsoft Windows
Vs2022 17.12版本
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\include\crt/host_config.h(153): fatal error C1189: #error: -- unsupported Microsoft Visual Studio version! Only the versions between 2017 and 2022 (inclusive) are supported! The nvcc flag '-allow-unsupported-compiler' can be used to override this version check; however, using an unsupported host compiler may cause compilation failure or incorrect run time execution. Use at your own risk. # --error 0x2 --
这里是提示的日志信息,来这里我们可以看到错误提示:
安装好之后,我们怎么使用呢:
来到这个地方,然后运行即可正常使用。
6:正式安装vs2022版本colmap
这里将anaconda文件夹名字改一下,虽然不知道有没有用
①编译:在colmap中新建名为build的文件夹
②在build文件夹中右键打开终端,输入:
cmake .. -G "Visual Studio 17 2022" -A x64 -DCMAKE_TOOLCHAIN_FILE=D:\appset\vcpkg\vcpkg-master\scripts\buildsystems\vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows -D CMAKE_CUDA_ARCHITECTURES="86" -D CMAKE_BUILD_TYPE=Debug
(这里86对应3060 -D CMAKE_BUILD_TYPE=Debug这样后续不会碰到bigobj问题,这是因为cmakelists中声明了如果使用CMAKE_BUILD_TYPE,那么就自动用bigobj,但是对于3.10和3.11由于我不用debug模式,这个参数可以不要,可以删掉,对于3.9还是要的)
其中,会出现一个问题,如下
他提示我们下载poselib超时,因此我们根据提示的问题,解决方法如下:问题的核心是PoseLib的依赖下载失败,并且FetchContent方式的下载验证文件哈希时发生了错误。即使您尝试通过vcpkg安装依赖项,CMake 仍然尝试用它的FetchContent机制下载和构建PoseLib。
因此手动下载指定的 PoseLib 版本并将其解压到正确的位置,从而跳过 FetchContent 的自动下载步骤。从以下地址手动下载PoseLib:
https://github.com/PoseLib/PoseLib/archive/8028473d92c9347794a0e3d3541863b5cbb15743.zip
然后这样就可以了
不知道为什么,他自动找到了我的这个路径,因此不用再添加这句话了:(当然,这里的变量好像得改名字,不叫这个名字)
{该文件放在了这里做了备份}
{(不用做)其实可以明确读一下cmakelists的这里,添加下面这句话,感觉就不会单独再下载了,但是我尝试失败了,可以以后试试。
if(FETCH_POSELIB)
list(APPEND VCPKG_MANIFEST_FEATURES "poselib")
endif()
}
③生成/Build
使用VS2022打开COLMAP.sln
release版本
①在解决方案资源管理器里,展开cmake,在ALL_BUILD上右键选择生成/build,等待即可
然后会出现一下错误,这个是因为太大了,所以要用bigobj进行编译:
解决方法:
③双击报错,跳转到报错项目
④点击【项目】-->【属性】
⑤找到【C/C++】-->【命令行】,在最后添加如下内容,并点击【应用】:
/bigobj
注意:这里有一个空格,即是空格+/bigobj,如果你的内容为空,那么只需要添加/bigobj即可:下图分别为原图和修改过的 (这里如果开始cmake的时候加了CMAKE_BUILD_TYPE就不用再来这一步了)
⑥回到【ALL_BUILD】,右键选择【重新生成】,然后成功
⑦在路径:build\src\colmap\exe\Debug中右键打开终端,输入:
colmap gui 正常显示,结束。
或者我们这么打开:
在调试中添加参数gui
然后将其设置为启动项
点击绿色箭头运行即可
为什么colmap_exe和colmap_main两个有什么区别:
colmap_exe是.lib,colmap_main是exe,因此我们只能运行main的应用程序,而lib的是运行不了的,运行了会报错如下:
Dubug版本(只能到3.9有效,3.10就报错了)
对于3.9版本来说,可以生成,但是运行的话提示缺少错误如下:缺少各种各样dll:lz4.dll等等等等,那是因为走的vcpkg,然后这里的没打开,开开就行,然后命令参数改为gui即可,最后将colmap_main的参数来一个gui 就可以运行了
对于3.10 3.11版本,我们采取另一种方法,使用RelWithDebInfo进行编译:
如果使用debug,那么会有如下的错误,但是我怎么改也不能成功
于是我使用RelWithDebInfo进行编译:
Success!!!
参考网页:
Windows+vcpkg+Cmake编译Colmap_vcpkg colmap-优快云博客
3.11/10 can't debug in Windows,VS2022 · Issue #2974 · colmap/colmap · GitHub
最详细简单的colmap(3.10-dev)环境配置(Windows,VS2019+Vcpkg)(2024/01/26)_最详简单的colmap-优快云博客
未看懂文献:
Windows上通过CMake编译COLMAP源码操作步骤_colmap一键脚本-优快云博客
7:如何调试colmap
对于relwithdebinfo,看这篇文章: