L'installation propre semblait fonctionner, mais je n'arrive toujours pas à faire fonctionner eigen

9

J'essaie d'installer eigen , mais je ne semble pas le faire fonctionner.

J'ai fait:

sudo apt-get install libeigen3-dev

et tout semble aller bien, après

dpkg -p libeigen3-dev

Je reçois:

Package: libeigen3-dev
Priority: extra
Section: libdevel
Installed-Size: 3718
Maintainer: Ubuntu Developers <[email protected]>
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 <[email protected]>
Homepage: http://eigen.tuxfamily.org

Tout m'allait bien. Cependant, lorsque j'essaie de compiler le code de base (donné dans le tutoriel):

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

Je le lance dans le shell comme ceci:

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

J'obtiens l'erreur suivante:

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

Il semble donc qu'il eigenn'ait pas été installé. Qu'est-ce que je rate?

Akavall
la source

Réponses:

10

Les eigen3fichiers d'en-tête vont dans un sous-répertoire /usr/include/eigen3par exemple

/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

vous devrez donc spécifier le chemin d'inclusion supplémentaire sur votre ligne de commande du compilateur, par exemple

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

Alternativement (et peut-être plus facilement), vous pouvez utiliser la pkg-configbase de données pour automatiser l'inclusion, c'est-à-dire

g++ -std=c++11 `pkg-config --cflags eigen3` first_eigen.cpp -o my_exec
tournevis
la source
4
Vous pouvez également créer un lien dans / usr / local / include vers / usr / include / eigen3 / Eigen afin de ne plus avoir à utiliser d'indicateur supplémentaire avec g ++. Pour ce faire, exécutez simplement ce qui suit:sudo ln -s /usr/include/eigen3/Eigen /usr/local/include/Eigen
Akronix
5

Remplacez l'inclusion par

#include <eigen3/Eigen/Dense>
Hossain Muctadir
la source
0

Pls. regardez si vous avez un dossier nommé "Eigen" dans / usr / include.

Je ne connais pas eigen et la routine d'installation. Mais très souvent, les dev inclus sont nommés avec une version.

Si vous avez un dossier "Eigen3" dans votre répertoire / usr / include, vous devez changer votre code en:

#include <Eigen3/Dense>
rechengehirn
la source