9

I am trying to install eigen, but I don't seem to get it to work.

I did:

sudo apt-get install libeigen3-dev

and everything seems fine, after

dpkg -p libeigen3-dev

I get:

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

Everything looked fine to me. However, when I try to compile the basic code (given in the tutorial):

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;
}

I run it in the shell like this:

g++ -std=c++11 first_eigen.cpp -o my_exec

I get the following error:

first_eigen.cpp:2:23: fatal error: Eigen/Dense: No such file or directory
 #include <Eigen/Dense>
                       ^
compilation terminated.

So it looks like eigen was not installed. What am I missing?

10

The eigen3 header files go in a subdirectory /usr/include/eigen3 e.g.

/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

so you will need to specify the additional include path on your compiler command line, for example

g++ -std=c++11 -I/usr/include/eigen3 first_eigen.cpp -o my_exec

Alternatively (and possibly more portably), you can use the pkg-config database to automate the inclusion, i.e.

g++ -std=c++11 `pkg-config --cflags eigen3` first_eigen.cpp -o my_exec
  • 4
    You also can make a link inside /usr/local/include to /usr/include/eigen3/Eigen so that you don't have to use any extra flag with g++ again. For doing that, just execute the following: sudo ln -s /usr/include/eigen3/Eigen /usr/local/include/Eigen – Akronix Apr 27 '15 at 17:12
5

Change the include to

#include <eigen3/Eigen/Dense>
0

Pls. look if you have a folder named "Eigen" in /usr/include.

I don't know eigen and the installation routine. But very often the dev includes are named with a version.

If you have a "Eigen3" folder in your /usr/include directory, you should change your code to:

#include <Eigen3/Dense>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.