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

news/2025/9/26 10:29:23/文章来源:https://www.cnblogs.com/asandstar/p/19113012

系统配置

主机型号:Supermicro SYS-4029GP-TRT2
CPU:Intel Xeon(双路,支持 AVX-512 / OpenMP 4.5)
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.mzph.cn/news/918113.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费带后台的网站模板购物网站开发教学视频

一、接口和抽象类的区别? 方法定义:接口和抽象类,最明显的区别就是接口只是定义了一些方法而已,在不考虑Java8中default方法情况下,接口中只有抽象方法,是没有实现的代码的。(Java8中可以有默认方法) 修饰符:抽象类中的修饰符可以有public、protected和private和<…

完整教程:Prompt Tuning提示词微调工程

完整教程:Prompt Tuning提示词微调工程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…

Autodesk Moldflow 2026下载地址与安装教程

软件介绍 Autodesk Moldflow 2026是欧特克公司推出的注塑与压缩成型仿真软件,专为优化塑料产品设计及模具制造流程设计。该版本集成Autodesk Moldflow Data Fitting 2026工具,支持将原始材料数据转换为仿真兼容的.ud…

深入解析:Java SOA集成:从“混乱“到“有序“的3步蜕变之旅!

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

程序员利用Python分析股票赚钱,开发了股票行情看板

近期股市又骚动起来,在3800点附近游荡,回忆起昔日炒股经历,历历在目,悲惨经历让人黯然神伤,去年共投入4000元入市,最后仅剩1000多,当了韭菜,无奈闭关修炼,忘记股市,全身心投入代码世界,享受代码带来的乐趣。…

OcrLicenseVo

public static OcrLicenseVo parseOcrLicense(OcrResultVo item) {int[][][] dtPolyList = new int[9][2][2];for (int i = 0; i < item.getRecTexts().size(); i++) {String value = StringUtils.trimToEmpty(item…

网站设计过程中需要注意的问题安卓开发平台

MBTI简介 迈尔斯-布里格斯类型指标&#xff08;Myers–Briggs Type Indicator&#xff0c;MBTI&#xff09;是由美国作家伊莎贝尔布里格斯迈尔斯和她的母亲凯瑟琳库克布里格斯共同制定的一种人格类型理论模型。 该指标以瑞士心理学家卡尔荣格划分的8种心理类型为基础&#xff…

实用指南:C#上位机软件:1.7 熟悉VS并开启你的第一个C#程序

实用指南:C#上位机软件:1.7 熟悉VS并开启你的第一个C#程序2025-09-26 10:15 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

界面控件DevExpress WinForms v25.1 - AI聊天控件功能持续增强

界面控件DevExpress WinForms v25.1 - AI聊天控件功能持续增强DevExpress WinForms拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应…

K8S Deployment 学习

1. Deployment 是什么? Deployment 是 Kubernetes 最常用的控制器之一,用于声明式地管理一组 Pod 副本(通常是无状态应用),实现自动部署、滚动升级、回滚等功能。 它是生产环境推荐的工作负载类型。 底层自动创建…

网站建设与管理专业好找工作吗政务公开 加强门户网站建设

文章目录 前言1.CPU架构2.8086寄存器3. 指令流水线4.内存模型5.总线6.硬盘7 计算机启动过程BIOS8.BootLoader9.地址映射10.为什么boot loader要放在0x7c00这个位置&#xff1f;11 显卡是如何显示的12.汇编指令1.环境搭建 12 程序13 x86 汇编指令介绍 前言 x86汇编 详解x86汇编…

全面掌握 Py2neo 与 Neo4j:从容器化部署到高级应用实战 - 详解

全面掌握 Py2neo 与 Neo4j:从容器化部署到高级应用实战 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Co…

集训队作业1——qoj#11722

Hamilton 解题报告 题目大意 以如下方式给出一张带权无向图:点集为 \(\{1,2,\dots,n\}\),边有两种:\(\forall 1\leq i<n\),\((i,i+1)\) 之间有边权为 \(0\) 的边;\(\forall 1\leq i<j\leq n\) 且 \(\gcd(i,…

US$59 EGS ISN Authorization for CGDI Prog BMW MSV80 Key Programmer

EGS ISN Authorization for CGDI Prog BMW MSV80 Key ProgrammerNo need shipping. Please pass us serial number of your CGDI Prog BMW.Kindly note this authorization is free if you have CGDI Prog MB or CG Pr…

如何设置将浏览器网页临时禁用网页mathjax渲染直接查看latex编译前的文本

如何设置将浏览器网页临时禁用网页mathjax渲染直接查看latex编译前的文本 以上截图来源自网页:https://www.cnblogs.com/brave-light/p/18855706,感谢原作者的分享。

《IDEA 2025破解 长效使用指南:2099 年有效期配置实战之JetBrains全家桶有效》​

一、简介: intellij idea 是一款广泛使用的集成开发环境(ide),专为提高开发者的生产力和代码质量而设计。作为一个强大的多语言 ide,intellij idea 以其智能代码补全、代码分析和重构功能而闻名。intellij idea 提…

网站服务器安装教程视频教程在线制作软件

mars3d开发过程中点击面图层飞行定位&#xff0c;设置俯仰角度后&#xff0c;layer.flyTo({没有生效的排查思路记录&#xff0c;给大家提供一下以后排查定位问题的方向 问题场景相关代码&#xff1a; 1.项目本身代码&#xff1a; 2.精简了关键性代码后&#xff0c;就可以去ge…

手机网站怎么优化关键词在哪查询网站做的哪些外链

目录 引言一、为什么要开发图层顺序调整功能二、开发思路整理1. 拖拽库方案选择2. cesium图层api查询 三、代码编写1. 编写拖拽组件代码2. 修改原有图层管理代码2.1 图层加载移除的调整2.2 图层顺序与拖拽列表的矛盾 3. 编写图层移动代码 四、总结 引言 本教程主要是围绕Cesium…

软件开发公司如何利用大数据可视化设计提升决策效率

软件开发公司如何利用大数据可视化设计提升决策效率在当下信息爆炸的时代,企业每天都在处理海量数据。然而,数据本身并不等同于价值,关键在于如何让这些复杂的数据被看见、被理解、并最终转化为决策依据。大数据可视…

基于菲涅尔积分的角锥喇叭方向图计算

一、理论基础 角锥喇叭方向图计算基于以下公式: ​​E面方向图​​:H面方向图:其中菲涅尔积分函数:二、Matlab程序实现 2.1 菲涅尔积分函数定义 function [C,S] = fresnel_int(x)% 自适应辛普森积分法计算菲涅尔积…