在Windows上编译OpenMVS需要先搭建好开发环境。我最近刚用VS2022和Vcpkg完成了一次完整的配置,整个过程比之前用VS2019要顺畅不少。下面就把我的实战经验分享给大家,帮你避开那些我踩过的坑。
首先需要安装的是CMake。建议直接去官网下载最新版本,安装时记得勾选"Add CMake to system PATH"选项。我实测3.28版本在VS2022下兼容性最好。安装完成后,在命令行输入cmake --version验证是否安装成功。
接下来是Vcpkg的安装。这个C++包管理器是OpenMVS依赖库管理的关键。我推荐直接克隆官方仓库到本地:
bash复制git clone https://github.com/microsoft/vcpkg.git
克隆完成后,运行bootstrap脚本:
bash复制.\vcpkg\bootstrap-vcpkg.bat
这里有个小技巧:建议把vcpkg添加到系统PATH,这样在任何目录都能直接调用vcpkg命令。我通常会在用户环境变量里添加两个路径:
VCPKG_ROOT:指向vcpkg安装目录%VCPKG_ROOT%VS2022的安装有几个关键点需要注意。首先是工作负载的选择,必须包含:
安装完成后,建议检查一下工具集版本。打开VS2022的开发者命令行,输入cl命令,应该能看到类似这样的输出:
code复制Microsoft (R) C/C++ Optimizing Compiler Version 19.38.33133 for x64
这个版本号要记下来,后面CMake配置时会用到。
CUDA的安装需要特别注意版本兼容性。根据我的测试,CUDA 12.2与VS2022的组合最稳定。安装时建议选择自定义安装,只安装以下组件:
安装完成后,在命令行运行nvcc --version验证是否成功。如果出现找不到命令的错误,可能需要手动将CUDA的bin目录添加到PATH中。
用Vcpkg安装依赖是整个过程中最耗时的环节。我整理了一个完整的安装命令,可以一次性安装所有必需库:
bash复制vcpkg install zlib:x64-windows boost:x64-windows eigen3:x64-windows ceres:x64-windows opencv:x64-windows cgal:x64-windows glew:x64-windows glfw3:x64-windows --triplet x64-windows
这个命令运行后可能会遇到几个常见问题:
--x-use-aria2参数启用多线程下载bash复制set VCPKG_VISUAL_STUDIO_PATH="C:\Program Files\Microsoft Visual Studio\2022\Community"
我遇到过ceres库编译失败的情况,解决方法是指定使用特定版本的依赖:
bash复制vcpkg install ceres:x64-windows --recurse --x-install-root-dir=%VCPKG_ROOT%\installed
OpenMVS的编译需要同时获取VCG和OpenMVS两个仓库。建议按照以下顺序操作:
bash复制git clone https://github.com/cdcseacave/VCG.git
git clone https://github.com/cdcseacave/openMVS.git
CMake配置是关键步骤,这里给出一个完整的配置命令:
bash复制cmake -S . -B build -G "Visual Studio 17 2022" -A x64 ^
-DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake ^
-DVCPKG_TARGET_TRIPLET=x64-windows ^
-DVCG_ROOT="path_to_your_VCG" ^
-DCUDA_TOOLKIT_ROOT_DIR="C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v12.2"
这个命令有几个需要注意的参数:
-G指定生成器版本,VS2022对应"Visual Studio 17 2022"-A指定目标架构为x64-DCUDA_TOOLKIT_ROOT_DIR必须指向正确的CUDA安装路径配置完成后,用VS2022打开生成的OpenMVS.sln解决方案。我建议首次编译选择Release x64配置,这样可以减少编译时间。
在VS2022中编译时,建议按照以下顺序操作:
编译过程中可能会遇到几个典型错误:
我最近一次完整编译大约花了45分钟(i7-12700H,32GB内存)。编译完成后,可以在bin目录下找到生成的exe文件。建议先运行简单的测试命令验证功能:
bash复制./OpenMVS_sample.exe --help
如果一切正常,你应该能看到OpenMVS的命令行帮助信息。至此,完整的开发环境就搭建完成了。在实际使用中,我发现VS2022的CMake集成比VS2019更加完善,调试体验也更好。特别是对于CUDA代码的调试,新版VS提供了更直观的设备变量查看功能。