You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CMake使用指定版本Eigen 3.3.7编译Ceres 1.13?

解决Ceres 1.13编译时指定Eigen 3.3.7的方法

核心思路

直接通过CMake参数强制指定Eigen 3.3.7的头文件路径,跳过系统默认的Eigen查找逻辑,避免版本冲突。

具体操作步骤

1. 准备Eigen 3.3.7

  • Eigen是纯头文件库,无需编译安装,直接解压源码即可使用:
    • 下载Eigen 3.3.7源码包并解压到任意目录(比如~/local/eigen-3.3.7)
    • 确认解压目录下存在Eigen/Core文件,这是头文件的根目录
  • 如果已经通过CMake安装到独立目录(比如/opt/eigen3.3.7),则确认路径/opt/eigen3.3.7/include/eigen3/Eigen/Core存在,后续需要用这个/opt/eigen3.3.7/include/eigen3作为头文件路径。

2. 配置Ceres的CMake编译环境

  • 创建Ceres源码的build目录并进入:
    mkdir ceres-build && cd ceres-build
    
  • 执行CMake命令,强制指定Eigen 3.3.7的路径:
    • 如果用解压的源码目录:
      cmake /path/to/ceres-source -DEIGEN_INCLUDE_DIR=~/local/eigen-3.3.7 -DCMAKE_BUILD_TYPE=Release
      
    • 如果用已安装的独立目录:
      cmake /path/to/ceres-source -DEIGEN_INCLUDE_DIR=/opt/eigen3.3.7/include/eigen3 -DCMAKE_BUILD_TYPE=Release
      
  • 查看CMake输出,确认Found Eigen的路径和版本是3.3.7,而非系统的3.4.0

3. 编译Ceres

  • 执行编译命令:
    make -j$(nproc)
    

为什么之前的方法失效?

  • 复制FindEigen.cmake属于多余操作,Ceres的CMake脚本本身支持直接指定EIGEN_INCLUDE_DIR参数,无需修改查找脚本
  • CMAKE_PREFIX_PATH或CMAKE_MODULES_PATH会让CMake优先查找系统已安装的配置文件,容易被系统的Eigen 3.4.0覆盖
  • 直接指定EIGEN_INCLUDE_DIR会强制Ceres使用指定路径的头文件,彻底绕开系统版本的干扰

内容的提问来源于stack exchange,提问作者BillThePlatypus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 05:33:34