【问题标题】:Eigen3 inverse() error while compile says undefined reference编译时出现 Eigen3 inverse() 错误说未定义的引用
【发布时间】:2021-11-15 12:18:30
【问题描述】:

我正在尝试使用 Eigen3 来计算矩阵的求逆,但是在编译过程中它会抛出一个错误

我的 Eigen3 愿景是 3.3.9,在 Ubuntu 18.04 下运行

CMakeFiles/test.dir/test.cpp.o:in function‘main’:
test.cpp:(.text+0x2a7):undefined reference of‘Eigen::MatrixBase<Eigen::Matrix<float, 4, 4, 0, 4, 4> >::inverse() const’

(这可能不是确切的错误信息,因为我是从中文翻译过来的,但我可以确保它说的是“未定义的引用”)

这是我的代码

#include<Eigen/Core>
#include<iostream>

using namespace std;
using namespace Eigen;
int main()
{
    Matrix4f M;

M<< 0.932322,  0.125848,  -0.85106, -0.313612,  -1.50979, -0.691102,
0.125848,  0.663803, -0.555993,  0.117918, -0.645694, -0.625737,
-0.85106, -0.555993,   1.26442,   0.39079;

cout << "Inverse= " << M.inverse() << endl;
}

还有我的 CMakeLists.txt

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)

project(test)

find_package(Eigen3 REQUIRED)

include_directories(${EIGEN3_INCLUDE_DIRS})

add_executable(test test.cpp)

我注意到similar question 但那是由 cuda 引起的。我的电脑上确实安装了 cuda,但我没有使用它。

感谢您阅读本文并帮助我。

【问题讨论】:

  • 另见此答案:stackoverflow.com/a/52230189
  • @kiner_shah 感谢您的回复。我试过了,但它不起作用,再次出现同样的错误。而且我注意到我通常可以使用 Matrix 的其他成员函数,如 trace() 或 transpose(),似乎只有 inverse() 不起作用
  • 看起来您的机器上安装了多个 Eigen 版本。可能包含一个版本的标题并链接到另一个版本。
  • 随机选择:添加“Eigen header”→带有#include&lt;Eigen/Eigen&gt; 的新行 .... 然后没有问题。 .....(“Eigen”是一个 2 行标题,只需添加另外两个标题。)

标签: c++ eigen3


【解决方案1】:

这可能看起来像一个链接错误,因为函数是前向声明的。但是 Eigen 仅是标头,因此您只需要为此包含正确的标头:

#include <Eigen/LU>

如此处所述:https://eigen.tuxfamily.org/dox/classEigen_1_1MatrixBase.html#a7712eb69e8ea3c8f7b8da1c44dbdeebf

或者,您可以包含&lt;Eigen/Dense&gt; 或&lt;Eigen/Eigen&gt;,它们都间接包含&lt;Eigen/LU&gt;。

【讨论】:

  • 行得通!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2022-07-15
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 2016-12-09
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多