Eigen 安装似乎有效,但我仍然无法使 eigen 工作

Aka*_*all 9 c++ 13.10

我正在尝试安装eigen,但我似乎没有让它工作。

我做了:

sudo apt-get install libeigen3-dev
Run Code Online (Sandbox Code Playgroud)

一切似乎都很好,之后

dpkg -p libeigen3-dev
Run Code Online (Sandbox Code Playgroud)

我得到:

Package: libeigen3-dev
Priority: extra
Section: libdevel
Installed-Size: 3718
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: all
Source: eigen3
Version: 3.2.0-4
Depends: pkg-config
Suggests: libeigen3-doc
Size: 698062
Description: lightweight C++ template library for linear algebra
 Eigen 3 is a lightweight C++ template library for vector and matrix math,
 a.k.a. linear algebra.
 .
 Unlike most other linear algebra libraries, Eigen 3 focuses on the simple
 mathematical needs of applications: games and other OpenGL apps, spreadsheets
 and other office apps, etc. Eigen 3 is dedicated to providing optimal speed
 with GCC. A lot of improvements since 2-nd version of Eigen.
Original-Maintainer: Debian Science Maintainers <debian-science-maintainers@lists.alioth.debian.org>
Homepage: http://eigen.tuxfamily.org
Run Code Online (Sandbox Code Playgroud)

我觉得一切都很好。但是,当我尝试编译基本代码(在教程中给出)时:

first_eigen.cpp

#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
int main()
{
  Matrix2d a;
  a << 1, 2,
  3, 4;
  MatrixXd b(2,2);
  b << 2, 3,
  1, 4;
  std::cout << "a + b =\n" << a + b << std::endl;
  std::cout << "a - b =\n" << a - b << std::endl;
  std::cout << "Doing a += b;" << std::endl;
  a += b;
  std::cout << "Now a =\n" << a << std::endl;
  Vector3d v(1,2,3);
  Vector3d w(1,0,0);
  std::cout << "-v + w - v =\n" << -v + w - v << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我像这样在 shell 中运行它:

g++ -std=c++11 first_eigen.cpp -o my_exec
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

first_eigen.cpp:2:23: fatal error: Eigen/Dense: No such file or directory
 #include <Eigen/Dense>
                       ^
compilation terminated.
Run Code Online (Sandbox Code Playgroud)

所以看起来eigen没有安装。我错过了什么?

ste*_*ver 10

eigen3头文件在子目录/usr/include/eigen3

/usr/include/eigen3/Eigen/Array
/usr/include/eigen3/Eigen/Cholesky
/usr/include/eigen3/Eigen/CholmodSupport
/usr/include/eigen3/Eigen/Core
/usr/include/eigen3/Eigen/Dense
/usr/include/eigen3/Eigen/Eigen
Run Code Online (Sandbox Code Playgroud)

所以你需要在你的编译器命令行上指定额外的包含路径,例如

g++ -std=c++11 -I/usr/include/eigen3 first_eigen.cpp -o my_exec
Run Code Online (Sandbox Code Playgroud)

或者(可能更便携),您可以使用pkg-config数据库来自动包含,即

g++ -std=c++11 `pkg-config --cflags eigen3` first_eigen.cpp -o my_exec
Run Code Online (Sandbox Code Playgroud)

  • 您还可以在 /usr/local/include 中建立一个指向 /usr/include/eigen3/Eigen 的链接,这样您就不必再次在 g++ 中使用任何额外的标志。为此,只需执行以下命令:`sudo ln -s /usr/include/eigen3/Eigen /usr/local/include/Eigen` (5认同)

Hos*_*dir 5

将包含更改为

#include <eigen3/Eigen/Dense>
Run Code Online (Sandbox Code Playgroud)