[项目构建]ubuntu24.04下从零部署limap步骤与问题解决方案
@水墨不写bug

cpp
//
// _oo0oo_
// o8888888o
// 88" . "88
// (| -_- |)
// 0\ = /0
// ___/`---'\___
// .' \\| |// '.
// / \\||| : |||// \
// / _||||| -:- |||||- \
// | | \\\ - /// | |
// | \_| ''\---/'' |_/ |
// \ .-\__ '-' ___/-. /
// ___'. .' /--.--\ `. .'___
// ."" '< `.___\_<|>_/___.' >' "".
// | | : `- \`.;`\ _ /`;.`/ - ` : | |
// \ \ `_. \_ __\ /__ _/ .-` / /
// =====`-.____`.___ \_____/___.-`___.-'=====
// `=---='
//
//
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// 佛祖保佑 永无BUG
// 佛曰:
// 写字楼里写字间,写字间里程序员;
// 程序人员写程序,又拿程序换酒钱。
// 酒醒只在网上坐,酒醉还来网下眠;
// 酒醉酒醒日复日,网上网下年复年。
// 但愿老死电脑间,不愿鞠躬老板前;
// 奔驰宝马贵者趣,公交自行程序员。
// 别人笑我忒疯癫,我笑自己命太贱;
// 不见满街漂亮妹,哪个归得程序员?
导师任务需求线规范三维高斯分布,由此想到3Dline++和limap,3Dline++是一个老项目了,在新版ubuntu24.04的环境下绝大多数环境不兼任,所以部署limap。



在部署limap过程中,可以按照如下步骤从0开始进行:
一、确保基础环境
假设你已经安装conda,并且会使用conda创建虚拟环境。
(Conda是一个开源的跨平台包管理器和环境管理器,用于安装、运行和升级软件包及其依赖项,并支持创建和管理独立的项目环境。)
如果有困难,则请先寻找其他文章或者视频教程安装conda环境
bash
conda create -n limap python=3.9 -y
conda activate limap
# 保证 cmake 版本满足 >= 3.17(用 conda-forge 通常最省事)
conda install -c conda-forge cmake>=3.17 ninja -y
二、安装其他依赖
编译安装 COLMAP:按照官方指南安装 COLMAP 3.8,确保使用 tag 3.8。
官方github: https://github.com/colmap/colmap
编译安装 PoseLib:按照 PoseLib 的安装指南进行安装。
官方github: https://github.com/PoseLib/PoseLib
安装 HDF5:直接使用bash
bash
sudo apt-get install libhdf5-dev
安装 HDF5 库到系统。
安装 Python 依赖 :
先激活虚拟环境:
bash
conda init;
conda activate Limap;
运行以下命令安装所需的 Python 包:(在Limap虚拟环境中进行!!)
python
python -m pip install torch==1.12.0 torchvision==0.13.0
python -m pip install -r requirements.txt
三、开始安装Limap!

下一步就可跟着官方步骤来了,直接执行如下命令:
bash
#找一个存放项目的位置
git clone https://github.com/cvg/limap.git
cd limap
git submodule update --init --recursive#初始化子模块
检查子模块状态:
bash
git submodule status
正常情况输出3-4行白色字体,标识子模块存在。
安装必要的依赖(在limap目录下,Limap虚拟环境中)
bash
python -m pip install -r requirements.txt
最后一步骤安装:
bash
python -m pip install -Ive .
在进行这个步骤之前,先关闭不必要的进程,包括游戏,音乐,QQ,微信,甚至是浏览器!
这一个步骤十分吃CPU资源。作者在进行这一步时,多次触发系统致命错误,无法修复导致会话直接退出了,在后来才发现在编译过程中内存占用接近100%!!,十分极限的完成了编译。
原因可能是:
编译工具(如 make)默认会根据 CPU 核心数启动并行任务(例如 make -j$(nproc))。如果每个编译进程(特别是 C++ 编译)占用几百 MB 甚至数 GB 内存,同时运行多个进程会迅速耗尽物理内存,导致系统使用大量交换空间,最终因内存耗尽而卡死或触发 OOM Killer。
LIMAP 可能依赖大型模板库(如 Eigen、CGAL、Ceres Solver 等),或者在源文件中包含了大量模板实例化。某些 C++ 文件在编译时(特别是开启优化)可能临时消耗数 GB 内存,如果多个这样的文件并行编译,内存压力会急剧上升。
如果关闭所有不必要的进程之后仍然爆内存了,解决方案参考如下:
1. 限制并行编译任务数
最直接有效的办法是降低并行度,确保总内存需求不超过物理内存。
bash
make -j2
#或者使用更保守的 -j1(单线程编译)
make -j1
可以先用单线程编译测试是否稳定,再逐步增加并行数。
2. 增加交换空间
如果物理内存确实紧张,可以临时增加 swap 空间作为缓冲。
创建一个 4GB 的交换文件(大小根据需要调整)
bash
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 编译完成后可关闭(重启后失效)
sudo swapoff /swapfile
四、安装完成后
接下来可以按照官方的步骤进行初步测试了~~


完~
转载请与作者联系