一、glomap的编译
根据官网(GitHub - colmap/glomap: GLOMAP - Global Structured-from-Motion Revisited)信息,目前应该是只支持Linux。
从论文中看,glomap是基于COLMAP, PoseLib, Theia的,官方的仓库也是来自colmap
因此,glomap需要colmap中所有的依赖:
sudo apt-get install \
git \
cmake \
ninja-build \
build-essential \
libboost-program-options-dev \
libboost-filesystem-dev \
libboost-graph-dev \
libboost-system-dev \
libeigen3-dev \
libflann-dev \
libfreeimage-dev \
libmetis-dev \
libgoogle-glog-dev \
libgtest-dev \
libsqlite3-dev \
libglew-dev \
qtbase5-dev \
libqt5opengl5-dev \
libcgal-dev \
libceres-dev
然后,按照官网步骤来完成编译,自然而然地:
mkdir build
cd build
cmake .. -GNinja
ninja && ninja install
二、出现的问题
2.1glomap本身
到这里,glomap地编译不出意外的话就会出意外了。。。
在一个云服务器中,有这样的报错,在Ubuntu主机中应该会出现:按照gpt4的解释,这是缺少cholmod.h,而这个文件来自libsuitesparse-dev。
另外,我在issue中,找到了“同道中人”,附上链接:https://github.com/colmap/glomap/issues/7
,后面有一个人的回答非常有用:
按照这样的步骤,glomap顺利编译!
sudo apt-get libceres-dev
sudo apt-get libsuitesparse-dev
cmake .. \
-GNinja \
-DCMAKE_CUDA_ARCHITECTURES=75 \
-DSuiteSparse_CHOLMOD_LIBRARY="/usr/lib/x86_64-linux-gnu/libcholmod.so" \
-DSuiteSparse_CHOLMOD_INCLUDE_DIR="/usr/include/suitesparse"
sudo ninja
sudo ninja install
附上我的图,我一开始搞错了,重新编译:
上面代码中间有一行cuda_architectrues=75,这个是指定了GPU的算力型号,这是是属于编译colmap过程中的问题,详情可以查看我的另一篇文章:colmap三维重建(更新中)——Ubuntu版本(colmap的编译)_ubuntu22.04 colmap-优快云博客https://blog.youkuaiyun.com/m0_74310646/article/details/138027524?spm=1001.2014.3001.5501
2.2关于cmake
在按照上述过程编译的时候,还会碰见另一个bug,就是cmake的版本,终端中会提示:要求的cmake版本>=3.28。作者在随后也有提到:
GLOMAP 依赖于两个外部库 - COLMAP 和 PoseLib。在默认设置下,该库由 GLOMAP 通过 FetchContent 自动构建。但是,如果首选自行安装的版本,还可以禁用 FETCH_COLMAP 和 FETCH_POSELIB CMake 选项。
要使用 FetchContent,cmake 的最低版本要求是 3.28。如果使用自装版本,cmake可以降级到3.10。
如果要使用高版本cmake,建议重新安装:
官网给的方法是:
wget https://github.com/Kitware/CMake/releases/download/v3.30.1/cmake-3.30.1.tar.gz
tar xfvz cmake-3.30.1.tar.gz && cd cmake-3.30.1
./bootstrap && make -j$(nproc) && sudo make install
gpt给的方法是:
如果你安装了新的 CMake 版本(例如 3.30),你可以选择如何处理旧版本(3.22)。以下是几种常见的处理方法:
1. 保留旧版本
保留旧版本不会影响新版本的使用,特别是如果你已经确保环境变量中指向的是新版本的 CMake。你可以通过运行 cmake --version
来验证当前使用的版本。旧版本可能在某些特定的项目中仍然有用,但如果不需要,可以选择删除。
2. 删除旧版本
#如果不再需要旧版本,可以选择删除它。请确保删除的是旧版本而不是新版本。通过APT删除旧版本:
#如果你是通过APT安装的 CMake 3.22,可以用以下命令卸载:
sudo apt-get remove --purge cmake
删除旧版本的手动安装目录:
#如果旧版本是手动安装的,你需要找到旧版本的安装路径并删除它。
#例如,如果旧版本安装在 /usr/local/bin 中,你可以使用以下命令删除:
sudo rm /usr/local/bin/cmake
3.安装新版本
wget https://github.com/Kitware/CMake/releases/download/v3.30.1/cmake-3.30.1-linux-x86_64.sh
#为下载的 .sh 文件赋予执行权限
chmod +x cmake-3.30.1-linux-x86_64.sh
#运行脚本进行安装
sudo path/to/cmake-3.30.1-linux-x86_64.sh
#验证
cmake --version
#更新环境变量
which cmake
export PATH=/path/to/cmake/bin:$PATH
source ~/.bashrc # 或者 source ~/.zshrc
附上我的:
三、效果如何(即将更新)
先放两个图