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

Eigen3调用inverse()编译时出现undefined reference错误如何解决

问题解决方法

undefined reference报错的核心原因是找不到Eigen::MatrixBase::inverse()的实现,由以下几个常见问题导致:

1. 头文件引用不全

Eigen的核心模块Eigen/Core仅包含基础矩阵定义、基础算术运算接口,矩阵求逆属于LU分解模块的功能,被统一封装在Eigen/Dense头文件中。
修复方法:将代码中的头文件引用

#include<Eigen/Core>

替换为

#include<Eigen/Dense>

2. CMake配置写法不规范

旧版CMake的include_directories写法容易出现头文件路径优先级冲突问题,Eigen3提供了官方导入目标,直接链接即可自动处理头文件路径。
修复方法:将CMakeLists.txt替换为以下内容:

cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
project(test)
# 优先使用官方Eigen3配置文件,避免兼容问题,指定最低版本为3.3
find_package(Eigen3 3.3 REQUIRED NO_MODULE)
add_executable(test test.cpp)
# 直接链接官方导入目标,自动添加头文件路径
target_link_libraries(test Eigen3::Eigen)

3. 多版本Eigen冲突

CUDA安装时会自带一份Eigen副本,默认路径为/usr/local/cuda/include/Eigen,如果find_package优先匹配到CUDA自带的Eigen版本,会和你需要的3.3.9版本出现符号不匹配。
排查与修复方法:

  • 在CMakeLists.txt中添加一行日志输出,确认找到的Eigen版本和路径:
    message(STATUS "Eigen3版本: ${EIGEN3_VERSION}, 路径: ${EIGEN3_INCLUDE_DIRS}")
    
    执行cmake配置时查看输出,如果路径指向CUDA目录,执行cmake时手动指定目标Eigen3的配置文件路径:
    cmake .. -DEigen3_DIR=/usr/lib/cmake/eigen3
    
    如果你是自行编译安装的Eigen3.3.9,将路径替换为你安装路径下的share/eigen3/cmake目录即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:06:08