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

Ubuntu20.04编译gtsam时找不到pybind11/eigen.h的解决方法

解决GTSAM编译时找不到pybind11/eigen.h的问题

问题背景

在Ubuntu 20.04系统上,使用Python 3.8.10和CMake 3.26.0编译GTSAM库时,执行以下命令:

git clone https://github.com/borglab/gtsam.git
cd gtsam
mkdir build && cd build
cmake .. -DGTSAM_BUILD_PYTHON=1 -DGTSAM_PYTHON_VERSION=3.8.10 -Dpybind11_INCLUDE_DIR=/home/user/Downloads/gtsam/wrap/pybind11/include
make -j$(nproc)

出现编译错误,提示找不到pybind11/eigen.h头文件,具体错误信息:

/home/user/Downloads/gtsam/build/python/gtsam.cpp:12:10: fatal error: pybind11/eigen.h: No such file or directory
   12 | #include <pybind11/eigen.h>
      |          ^~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [python/CMakeFiles/gtsam_py.dir/build.make:188: python/CMakeFiles/gtsam_py.dir/gtsam.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:32610: python/CMakeFiles/gtsam_py.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

解决方案

1. 补全GTSAM的pybind11子模块

GTSAM的pybind11依赖以Git子模块形式存在,直接克隆仓库时可能未自动拉取子模块内容,导致头文件缺失。执行以下命令补全子模块:

cd /home/user/Downloads/gtsam
git submodule update --init --recursive

完成后清空build目录重新编译:

rm -rf build && mkdir build && cd build
cmake .. -DGTSAM_BUILD_PYTHON=1 -DGTSAM_PYTHON_VERSION=3.8.10 -Dpybind11_INCLUDE_DIR=/home/user/Downloads/gtsam/wrap/pybind11/include
make -j$(nproc)

2. 修正pybind11_INCLUDE_DIR路径

若子模块已完整,检查pybind11/eigen.h实际位置:该文件通常位于/home/user/Downloads/gtsam/wrap/pybind11/include/pybind11/eigen.h,此时CMake参数中的pybind11_INCLUDE_DIR需指向包含pybind11文件夹的上级目录(即原路径无需修改,若子模块正确克隆则此路径有效)。

3. 使用系统安装的pybind11

不想依赖仓库自带子模块时,可通过apt安装系统版本:

sudo apt update && sudo apt install pybind11-dev

去掉CMake命令中的-Dpybind11_INCLUDE_DIR参数,让CMake自动查找系统安装的pybind11:

rm -rf build && mkdir build && cd build
cmake .. -DGTSAM_BUILD_PYTHON=1 -DGTSAM_PYTHON_VERSION=3.8.10
make -j$(nproc)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:52:44