Windows上通过CMake编译COLMAP源码操作步骤

文章详细介绍了如何编译COLMAP源码,包括使用vcpkg安装依赖库,解决编译过程中遇到的错误,如节数超出限制和未声明的标识符问题,以及编写并运行build.sh脚本来创建debug和release版本的colmap.exe。此外,还展示了如何运行colmap的GUI界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      COLMAP源码:https://github.com/colmap/colmap ,最新的稳定版本位于master分支,最新的开发版本位于dev分支,这里使用master分支进行编译,commit id为1555ff0。官方推荐使用vs2019,使用vs2022有一些已知bugs会导致crash,这里使用vs2019.

      1.安装vcpkg,依次执行如下命令:将vcpkg源码clone到C:/dev目录下

vcpkg.exe integrate install 
vcpkg.exe install ceres:x64-windows
vcpkg.exe install boost:x64-windows
vcpkg.exe install freeimage:x64-windows
vcpkg.exe install flann:x64-windows
vcpkg.exe install glew:x64-windows
vcpkg.exe install qt5:x64-windows
vcpkg.exe install metis:x64-windows

      关于vcpkg的介绍,参考:https://blog.csdn.net/fengbingchun/article/details/131145117

      2.解决编译过程中的error:
      (1).src/estimators/generalized_relative_pose.cc: fatal error C1128: 节数超过对象文件格式限制:
      在主CMakeLists.txt中,在各种option设置语句后,添加如下语句:

if(MSVC)
    add_compile_options(/bigobj)
endif()

      (2).src/estimators/pose.cc: error C2065: "qvec_data", "tvec_data":未声明的标识符
      在此文件的RefineAbsolutePose函数的前部添加如下语句:

double* qvec_data = qvec->data();
double* tvec_data = tvec->data();

      3.编写build.sh,内容如下:注:编译debug时,需要再额外从vcpkg中拷贝一些库到colmap.exe下,脚本中已添加;release不需要

#! /bin/bash

usage() {
    echo "An input parameter is required, and only one of the following parameters can be supported: debug release"
    echo "For example: $0 debug"
    exit -1
}

if [ $# != 1 ]; then
    usage
fi

echo "==== build $1 ===="

common_options=" -DCUDA_ENABLED=OFF \
    -DCMAKE_TOOLCHAIN_FILE=C:/dev/vcpkg/scripts/buildsystems/vcpkg.cmake"

vcpkg_path=C:/dev/vcpkg/installed/x64-windows

if [ $1 == "debug" ]; then
    if [[ ! -d "build_debug" ]]; then
        mkdir build_debug
        cd build_debug
    else
        cd build_debug
    fi

    cmake \
        -G"Visual Studio 16 2019" -A x64 \
        ${common_options} \
        -DCMAKE_BUILD_TYPE=Debug \
        -DCMAKE_CONFIGURATION_TYPES=Debug \
        ..
    cmake --build . --config debug --target colmap_exe --parallel 24

    echo "==== copy dynamic libraries ===="
    colmap_exe_path=src/exe/Debug
    cp ${vcpkg_path}/bin/lz4.dll ${colmap_exe_path}
    cp ${vcpkg_path}/bin/FreeImage.dll ${colmap_exe_path}
    cp ${vcpkg_path}/bin/zlib1.dll ${colmap_exe_path}
    cp ${vcpkg_path}/bin/libpng16.dll ${colmap_exe_path}
    cp ${vcpkg_path}/bin/tiff.dll ${colmap_exe_path}
    cp ${vcpkg_path}/bin/raw.dll ${colmap_exe_path}
    cp ${vcpkg_path}/bin/OpenEXR-3_1.dll ${colmap_exe_path}
    cp ${vcpkg_path}/bin/Imath-3_1.dll ${colmap_exe_path}
    cp ${vcpkg_path}/bin/Iex-3_1.dll ${colmap_exe_path}
    cp ${vcpkg_path}/bin/lcms2.dll ${colmap_exe_path}
    cp ${vcpkg_path}/bin/IlmThread-3_1.dll ${colmap_exe_path}
    cp ${vcpkg_path}/bin/Iex-3_1.dll ${colmap_exe_path}

    cp ${vcpkg_path}/debug/bin/openjp2.dll ${colmap_exe_path}
    cp ${vcpkg_path}/debug/bin/libwebpdecoder.dll ${colmap_exe_path}
elif [ $1 == "release" ]; then
    if [[ ! -d "build_release" ]]; then
        mkdir build_release
        cd build_release
    else
        cd build_release
    fi

    cmake \
        -G"Visual Studio 16 2019" -A x64 \
        ${common_options} \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_CONFIGURATION_TYPES=Release \
        ..
    cmake --build . --config release --target colmap_exe --parallel 24
else
    echo "Error: $1 is not supported"
    usage
    exit -1
fi

      执行脚本生成colmap.exe:此脚本与主CMakeLists.txt位于同一目录下
      (1).debug:./build.sh debug
      (2).release: ./build.sh release ,执行结果如下所示:

      以debug为例,执行./build.sh debug后,会在build_debug目录下生成COLMAP.sln工程,在build_debug/src/exe/Debug目录下生成colmap.exe
      COLMAP.sln工程界面如下:

      打开colmap gui:打开cmd,执行:colmap.exe gui,结果如下所示: 

 

 

### 如何在 Windows 系统上安装 COLMAP #### 使用 vcpkg 安装 COLMAP COLMAP 的官方安装指南推荐通过 vcpkg 来完成依赖项的管理以及软件本身的编译和安装。以下是具体操作: 1. **安装 vcpkg** 下载并初始化 vcpkg 工具链,这是 Microsoft 提供的一个跨平台库管理工具[^3]。 ```bash git clone https://github.com/microsoft/vcpkg.git cd vcpkg .\bootstrap-vcpkg.bat ``` 2. **集成 vcpkg 到开发环境** 运行以下命令以启用 vcpkg 对 Visual Studio 或其他构建系统的支持: ```bash .\vcpkg integrate install ``` 3. **安装 COLMAP 所需依赖项** COLMAP 主要依赖于 Boost、QT 和 CGAL 库。可以通过 vcpkg 自动化这些依赖项的安装过程: ```bash .\vcpkg install boost qt5-base cgal cuda --triplet=x64-windows ``` 4. **克隆 COLMAP 源码** 从 GitHub 上获取 COLMAP 的源代码仓库,并切换至目标分支(通常是 `master` 分支): ```bash git clone https://github.com/colmap/colmap.git cd colmap ``` 5. **配置 CMake 构建选项** 创建一个单独的目录用于存储构建产物,并运行 CMake 命令来设置项目参数。注意指定 CUDA 架构为 `native` 可能会减少兼容性错误的发生概率[^5]。 ```bash mkdir build && cd build cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release \ -DBoost_ROOT=C:/path/to/boost \ -DQT_QMAKE_EXECUTABLE=C:/path/to/qt/bin/qmake.exe \ -DCUDA_TOOLKIT_ROOT_DIR=C:/Program\ Files/NVIDIA\ GPU\ Computing\ Toolkit/CUDA/vXX.X \ -DCMAKE_CUDA_ARCHITECTURES=native ``` 6. **执行构建流程** 调用 ninja 编译器生成最终的应用程序二进制文件: ```bash ninja ``` 7. **验证安装成功与否** 成功完成后,在 `build/src/exe` 文件夹下应该能找到名为 `colmap.exe` 的可执行文件。 #### 替代方案:直接使用预编译COLMAP 如果不想经历复杂的编译环节,则可以直接访问 COLMAP 官方网站下载适用于 Windows 平台的 ZIP 归档包[^2]。解压之后记得把其中的 `bin` 子目录加入全局 PATH 环境变量以便随时调用该工具。 需要注意的是,当存在多个版本冲突时(比如 Conda 中也包含了相同名称但功能不同的模块),可能需要先卸载旧有实例再重新指向新位置下的 EXE 文件。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值