【发布时间】: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,但我没有使用它。
感谢您阅读本文并帮助我。
【问题讨论】:
-
你需要链接 Eigen3 库 - cmake.org/cmake/help/latest/command/target_link_libraries.html
-
@kiner_shah 感谢您的回复。我试过了,但它不起作用,再次出现同样的错误。而且我注意到我通常可以使用 Matrix 的其他成员函数,如 trace() 或 transpose(),似乎只有 inverse() 不起作用
-
看起来您的机器上安装了多个 Eigen 版本。可能包含一个版本的标题并链接到另一个版本。
-
随机选择:添加“Eigen header”→带有
#include<Eigen/Eigen>的新行 .... 然后没有问题。 .....(“Eigen”是一个 2 行标题,只需添加另外两个标题。)