Sophus 1.22.4 与 Eigen 3.3.4 环境配置:Ubuntu 20.04 下 3 步解决 fmt 依赖
在视觉SLAM开发中,Sophus库作为李群李代数的重要实现工具,其环境配置往往是初学者的第一道门槛。本文将针对《视觉SLAM十四讲》第二版第4章代码实践中最常见的环境搭建难题——Sophus模板库与fmt的版本兼容性问题,提供一套清晰的Ubuntu 20.04解决方案。不同于单纯的理论讲解,我们聚焦于三个关键步骤的实操细节,确保读者能快速搭建可用的开发环境。
1. 环境准备与依赖检查
在开始安装前,我们需要确保系统具备必要的编译工具和基础依赖。打开终端执行以下命令:
sudo apt update sudo apt install -y build-essential cmake git libeigen3-dev关键版本验证:
- Eigen库版本必须≥3.3.4,可通过以下命令验证:
若版本过低,需手动升级:cat /usr/include/eigen3/Eigen/src/Core/util/Macros.h | grep VERSION_STRINGgit clone https://gitlab.com/libeigen/eigen.git cd eigen && mkdir build && cd build cmake .. && sudo make install
注意:Ubuntu 20.04默认源中的Eigen版本为3.3.7,通常无需额外升级。但若遇到Sophus编译错误,建议优先检查Eigen版本。
2. fmt 8.1.1 精准安装
Sophus 1.22.4对fmt库有严格的版本要求,必须使用8.1.1版本。以下是具体安装流程:
wget https://github.com/fmtlib/fmt/archive/refs/tags/8.1.1.tar.gz tar xvf 8.1.1.tar.gz cd fmt-8.1.1 mkdir build && cd build cmake -DFMT_TEST=OFF .. make -j$(nproc) sudo make install常见问题排查:
- 若出现
fmt/core.h相关错误,说明系统存在其他版本fmt冲突,需先卸载:sudo apt purge -y libfmt-dev sudo rm -rf /usr/local/lib/cmake/fmt
3. Sophus 模板库编译与验证
完成前置依赖后,开始安装Sophus模板库:
git clone https://github.com/strasdat/Sophus.git cd Sophus git checkout v1.22.4 mkdir build && cd build cmake -DBUILD_SOPHUS_TESTS=OFF .. make -j$(nproc) sudo make install安装验证: 创建测试文件test_sophus.cpp:
#include <sophus/so3.hpp> #include <iostream> int main() { Sophus::SO3d SO3_v = Sophus::SO3d::exp(Eigen::Vector3d(0.1, 0, 0)); std::cout << "SO3 matrix:\n" << SO3_v.matrix() << std::endl; return 0; }对应的CMakeLists.txt配置:
cmake_minimum_required(VERSION 3.12) project(test_sophus) find_package(Sophus REQUIRED) add_executable(test_sophus test_sophus.cpp) target_link_libraries(test_sophus Sophus::Sophus fmt)编译并运行测试:
mkdir build && cd build cmake .. && make ./test_sophus4. 高级配置与问题解决方案
4.1 自定义安装路径
若需指定安装目录(如本地用户目录),可在cmake阶段添加:
cmake -DCMAKE_INSTALL_PREFIX=$HOME/local ..随后需配置环境变量:
echo 'export LD_LIBRARY_PATH=$HOME/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc4.2 多版本共存管理
当系统需要多个Sophus版本时,推荐使用符号链接管理:
sudo ln -s /usr/local/lib/libSophus.so.1.22.4 /usr/lib/libSophus.so4.3 与Pangolin的协同配置
若项目同时使用Pangolin可视化工具,CMake配置需包含:
find_package(Pangolin REQUIRED) target_link_libraries(your_target Sophus::Sophus Pangolin::Pangolin fmt )5. 典型错误与修复方案
错误1:Sophus::SO3d未定义引用
- 原因:未链接fmt库
- 修复:在
target_link_libraries中添加fmt
错误2:Eigen::MatrixBase相关模板错误
- 原因:Eigen版本不匹配
- 修复:强制指定Eigen路径:
include_directories(/usr/include/eigen3)
错误3:C++17特性缺失
- 修复:在CMake中启用C++17:
set(CMAKE_CXX_STANDARD 17)
通过以上步骤,开发者可以快速搭建稳定的Sophus开发环境。实际项目中,建议将相关依赖版本固定写入项目文档,避免后续团队协作时的环境不一致问题。