当前位置: 首页 > news >正文

COLMAP 安装在ubuntu20服务器上问题解决全记录

系统配置

GPU:NVIDIA GPU,CUDA 11.8(驱动对应 515+ 版本)
操作系统:Ubuntu 20.04 LTS
内存:≥ 256 GB
编译器:gcc 9.4.0,g++ 9.4.0
CMake:3.30.x(自编译安装到 /usr/local)
Python:系统 Python 3.8.10(避免 Anaconda 环境干扰)
很多问题,都是因为 Anaconda 的库(MKL、libcrypto、libtiff)和 系统库(OpenBLAS、libssl、libtiff5)冲突,所以全程都退回到系统环境。

Ceres(SSH 克隆)+ COLMAP 从零安装

系统前置(保持环境“干净”)

# 退出 conda,避免把 Anaconda 的 libcrypto / MKL / libtiff 带进来
conda deactivate || true# 临时清理环境变量(可在本终端会话使用)
unset LD_LIBRARY_PATH
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
hash -r# (可选) 检查当前 python 与 numpy
which python; python --version
python3 -c "import sys; print(sys.version)"

安装系统依赖

sudo apt update
sudo apt install -y \build-essential git ninja-build cmake pkg-config \libboost-all-dev libeigen3-dev libgoogle-glog-dev libgflags-dev \libsuitesparse-dev libopenblas-dev liblapack-dev \libfreeimage-dev libtiff-dev libffi-dev \libglew-dev qtbase5-dev libqt5opengl5-dev libcgal-dev libmetis-dev \libsqlite3-dev libcurl4-openssl-dev

libtiff/libffi 符号未解析,就是靠 libtiff-devlibfreeimage-devlibffi-dev 这几个包解决的。

快速确认:

ldd /usr/lib/x86_64-linux-gnu/libfreeimage.so | grep tiff    # 应该指向 libtiff.so.5
ldconfig -p | grep libffi                                    # 有 libffi.so.7/8

准备 PoseLib 与 Faiss(不用再联网下载)

把已经下载好的 zip 解压到 COLMAP 仓库里的 external 目录

# 假设 COLMAP 在 ~/my_code/colmap
cd ~/my_code/colmap/cmake/external# 把 zip 解压后的“源码根目录”落在如下路径(重要:目录层级要对)
#   PoseLib -> ~/my_code/colmap/cmake/external/pose_lib/PoseLib/...
#   Faiss   -> ~/my_code/colmap/cmake/external/faiss/faiss/...
# 例如:
# unzip ~/Downloads/PoseLib-master.zip -d pose_lib
# unzip ~/Downloads/faiss-main.zip     -d faiss

Ceres Solver(SSH 克隆 + 构建安装为共享库)

强烈建议用 GitHub 镜像的 SSH(简单可靠)。googlesource 的 SSH 要 Gerrit 账号和 29418 端口,容易卡。

cd ~/my_code
git clone git@github.com:ceres-solver/ceres-solver.git
cd ceres-solver
mkdir -p build && cd buildcmake .. -GNinja \-DCMAKE_BUILD_TYPE=Release \-DBUILD_TESTING=OFF \-DBUILD_EXAMPLES=OFF \-DBUILD_SHARED_LIBS=ON \                 # 关键:用 .so,避免 absl 链接错误-DCMAKE_INSTALL_PREFIX=/usr/localninja -j"$(nproc)"
sudo ninja install

检查安装的 CMake 配置包是否在位:

ls /usr/local/lib/cmake/Ceres/{CeresConfig.cmake,CeresTargets.cmake}

之前的 undefined reference to absl::... 就是因为装成了 静态 libceres.a;上面这步用了 -DBUILD_SHARED_LIBS=ON 专门修复这个问题。

构建 COLMAP(使用本地 PoseLib/Faiss、CUDA 11.8、系统 BLAS)

cd ~/my_code/colmap
rm -rf build && mkdir build && cd buildcmake .. -GNinja \-DCMAKE_BUILD_TYPE=Release \-DBLA_VENDOR=OpenBLAS \                                   # 强制系统 BLAS,避免找到 Anaconda MKL-DFETCH_POSELIB=OFF \-DFETCHCONTENT_SOURCE_DIR_POSELIB="$HOME/my_code/colmap/cmake/external/pose_lib/PoseLib" \-DFETCH_FAISS=OFF \-DFETCHCONTENT_SOURCE_DIR_FAISS="$HOME/my_code/colmap/cmake/external/faiss" \-DFAISS_ENABLE_PYTHON=OFF \                                # 关键:禁用 Faiss Python 绑定,避免 CMake 去找 NumPy/SWIG-DCeres_DIR=/usr/local/lib/cmake/Ceres \                   # 显式告诉 COLMAP 用我们刚装的 Ceres-DEIGEN3_INCLUDE_DIR=/usr/include/eigen3 \                 # Ubuntu 20.04 用头文件路径即可(没必要设 Eigen3_DIR)-DPython_EXECUTABLE=/usr/bin/python3 \                     # 用系统 Python,避免 conda-DCMAKE_CUDA_COMPILER=/usr/local/cuda-11.8/bin/nvcc \      # CUDA 11.8-DCMAKE_CUDA_ARCHITECTURES=native                          # 或者写具体算力:52/61/75/86/89 等ninja -j"$(nproc)"
# 安装到 /usr/local/bin/colmap(可不装,见下条)
sudo ninja install

说明

  • -DBLA_VENDOR=OpenBLAS:链接到/home/.../anaconda3/lib/libmkl...,这会和系统库冲突。强制 OpenBLAS 后,CMake 不会再捡 MKL。
  • -DFAISS_ENABLE_PYTHON=OFF: “找不到 Python NumPy/Development.Module” 就是 Faiss 的 Python 绑定的问题,关掉即可。
  • -DEIGEN3_INCLUDE_DIR:Ubuntu 20.04 的 Eigen 采用 “头文件包” 模式(/usr/include/eigen3),并不提供 Eigen3Config.cmake,直接给头文件路径最稳。
  • -DCeres_DIR:显式指向 /usr/local/lib/cmake/Ceres,避免找到系统旧版或未配置的包。
  • -DCMAKE_CUDA_ARCHITECTURES:如果自动检测到的是 52 而你的卡更高,可手动设为真实算力(如 86 Ampere、89 Ada)。

运行与验证

# 如果执行了 sudo ninja install
which colmap
colmap -h
colmap gui# 如果不安装,直接用 build 目录下的可执行文件
./src/colmap/exe/colmap -h
./src/colmap/exe/colmap gui# (可选) 检查链接到的是系统库而不是 Anaconda
ldd $(which colmap) | egrep "crypto|tiff|ffi|mkl|openblas"

如果不执行 sudo ninja install

  • 可执行文件只在 build/src/colmap/exe/colmap 里,不在 PATH;自己用相对/绝对路径运行即可。
  • 动态库搜索一般没问题(CMake 已设置 rpath 指向 /usr/local、CUDA 路径等)。

遇到过的问题 & 这版怎么规避的

  • CMake 要求 Python/NumPy(来自 Faiss Python 绑定) → 已用 -DFAISS_ENABLE_PYTHON=OFF 彻底禁用。
  • Ceres 链接 absl 符号未解析 → Ceres 改为共享库:-DBUILD_SHARED_LIBS=ON
  • libcrypto.so.3 与 1.1 冲突 → 全程退出 conda,并清理 LD_LIBRARY_PATH
  • libp11-kit.so 提示 ffi_*@LIBFFI_* 未找到 → 安装/重装 libffi-devsudo ldconfig
  • TIFFField* 符号未解析libfreeimage.solibtiff.so.5) → sudo apt install --reinstall libfreeimage-dev libtiff-dev,并用 ldd ... | grep tiff 确认。
  • “Cannot generate a safe runtime search path for swigfaiss…” → 仅是警告;且 Python 绑定已关闭,不再出现。

额外小贴士

  • 保持“干净环境”再编译

    conda deactivate || true
    unset LD_LIBRARY_PATH
    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    hash -r
    
  • 强制系统 BLAS:用 -DBLA_VENDOR=OpenBLAS,再也不会把 MKL 从 Anaconda 拿进来。

  • CUDA 架构:如果 native 检测不准,手动写比如 -DCMAKE_CUDA_ARCHITECTURES=86(A100 是 80/86),89(Ada)。

http://www.hskmm.com/?act=detail&tid=17741

相关文章:

  • 完整教程:Prompt Tuning提示词微调工程
  • Autodesk Moldflow 2026下载地址与安装教程
  • 程序员利用Python分析股票赚钱,开发了股票行情看板
  • 9.26
  • K8S Deployment 学习
  • 全面掌握 Py2neo 与 Neo4j:从容器化部署到高级应用实战 - 详解
  • 原型
  • 集训队作业1——qoj#11722
  • 如何设置将浏览器网页临时禁用网页mathjax渲染直接查看latex编译前的文本
  • 《IDEA 2025破解 长效使用指南:2099 年有效期配置实战之JetBrains全家桶有效》​
  • Helloworld
  • 基于菲涅尔积分的角锥喇叭方向图计算
  • Flask的ORM工具SQLAlchemy
  • 使用 Rust 和 Tesseract OCR 实现英文数字验证码识别
  • 构建复合AI系统以实现可扩展工作流
  • Python HTTPS 爬虫实战,requests aiohttp Selenium 抓取技巧、HTTPS 问题与抓包调试(python https爬虫、反爬、抓包、证书处理)
  • GreatSQL 优化技巧:最值子查询与窗口函数相互转换
  • Windows Time 时间同步时出错
  • CCS开发环境和TMS320系列DSP实现IP-IQ谐波与无功电流检测
  • 多机动模型PHD滤波算法
  • Navicat17无限试用重置14天
  • 基于Electron的Web打印解决方案:web-print-pdf技术分享
  • CF455D Serega and Fun
  • 实验任务
  • 61.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--提取金额 - 实践
  • 使用 Ansible 部署 Elasticsearch 集群
  • 免费无广告!这款开源工具让文件转换像复制粘贴一样简单!
  • 时序InSAR形变结果合并操作说明 - ENVI
  • CSP-S 2025 #2
  • 完整教程:38.应用层协议HTTP(一)