vs2022+win10+colmap3.9-3.11教程

1cmake安装

 

2VS2019(我用的是vs2022)环境变量

 

 

 

作者写了这句话:(下面截图)这个cl.exe是编译器版本的意思  

 

 

https://blog.csdn.net/lu_embedded/article/details/138359375 (详细介绍编辑器相关知识)

2.1VS修改英文环境(方便vcpkg)(其实可以不用  中文最后也能用vcpkg

 

 

 

3nvidiacudn

输入Nvidia-sminvcc -V看看就行

 

 

 

 

这里一定要和vs的版本对应上,详细请往下翻看,比如cuda12.5支持vs202217.12

4:cgal(可以不用手动安装,这步完全跳过)

5vcpkg下载安装使用

1.下载安装:  git clone https://github.com/microsoft/vcpkg 

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.5vs中使用vcpkg

1、首先建议每次使用vcpkg都先初始化一下(作为更新):./bootstrap-vcpkg.bat

 

5vcpkg安装集成好的colmap

 

1vcpkg install cgal:x64-windows

 

2vcpkg install freeimage:x64-windows

 

3vcpkg install glew:x64-windows

 

4vcpkg install boost:x64-windows

 

5vcpkg install ceres[suitesparse,cxsparse]:x64-windows     #时间1.8h

 

6vcpkg 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

12vcpkg 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安装才能成功

https://docs.nvidia.com/cuda/archive/12.5.0/cuda-installation-guide-microsoft-windows/index.html#system-requirements 

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.103.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_execolmap_main两个有什么区别:

colmap_exe.lib,colmap_mainexe,因此我们只能运行main的应用程序,而lib的是运行不了的,运行了会报错如下:

 

 

 

 

 

 

 

Dubug版本(只能到3.9有效,3.10就报错了)

 

对于3.9版本来说,可以生成,但是运行的话提示缺少错误如下:缺少各种各样dlllz4.dll等等等等,那是因为走的vcpkg,然后这里的没打开,开开就行,然后命令参数改为gui即可,最后将colmap_main的参数来一个gui  就可以运行了

 

 

 

 

 

 

对于3.10 3.11版本,我们采取另一种方法,使用RelWithDebInfo进行编译:

 

如果使用debug,那么会有如下的错误,但是我怎么改也不能成功

 

 

 

 

于是我使用RelWithDebInfo进行编译:

 

 

 

 

 

 

Success!!!

 

 

 

参考网页:

https://blog.csdn.net/m0_59534535/article/details/139193926
https://github.com/colmap/colmap/issues/2974

https://blog.csdn.net/weixin_52677672/article/details/135871590

 

未看懂文献:

https://blog.csdn.net/fengbingchun/article/details/131147000

 

 

7:如何调试colmap

 

对于relwithdebinfo,看这篇文章:

https://blog.csdn.net/inter_peng/article/details/53933206

 

posted @ 2024-12-03 15:56  骑士部落  阅读(680)  评论(0)    收藏  举报