2010-07-19 5 views
3

Je me sers de la bibliothèque Eigen qui promet la vectorisation des opérations matricielles. Je ne sais pas comment utiliser les fichiers donnés dans Eigen et écrire un makefile. Les fichiers sources qui utilisent Eigen comprennent les fichiers énumérés ci-dessous, ceux-ci ne sont pas d'en-tête même des fichiers (Ils ne sont que quelques fichiers texte) -Comment écrire un makefile pour un projet C++ qui utilise Eigen, la bibliothèque de modèles C++ pour l'algèbre linéaire?

<Eigen/Core> 
<Eigen/Dense> 
<Eigen/Eigen> 

et ainsi de suite. Sur la page web d'Eigen, il est mentionné que, pour utiliser ses fonctions, je n'ai pas besoin de construire le projet, alors comment puis-je inclure ces fichiers dans mon makefile pour construire mon projet. Mon exemple de fichier main.c ressemble à ceci. Quelqu'un peut-il me montrer comment écrire un makefile Makefile pour ce fichier -

#include <Eigen/Core> 

// import most common Eigen types 
USING_PART_OF_NAMESPACE_EIGEN 

int main(int, char *[]) 
{ 
    Matrix3f m3; 
    m3 << 1, 2, 3, 4, 5, 6, 7, 8, 9; 
    Matrix4f m4 = Matrix4f::Identity(); 
    Vector4i v4(1, 2, 3, 4); 

    std::cout << "m3\n" << m3 << "\nm4:\n" 
    << m4 << "\nv4:\n" << v4 << std::endl; 
} 

Aide!

+0

Comment compiler et lier? –

Répondre

6

Selon Eigen's website, il s'agit d'une bibliothèque en-tête uniquement.

Cela signifie qu'il n'y a rien à compiler ou à lier à. Au lieu de cela, tant que vous avez les fichiers d'en-tête dans un emplacement standard (/usr/local/include sur * nix/Mac), tout ce que vous avez à faire est d'ajouter cet emplacement à votre étape de construction du préprocesseur.

En supposant que vous utilisez * nix/Mac, et en supposant que vous avez tout installé à l'emplacement par défaut (par exemple #include <Eigen/Core> références du fichier /usr/local/include/Eigen/Core), puis un makefile super simple ressemblerait à ceci:

main: main.cpp 
    g++ -I /usr/local/include main.cpp -o main 

qui dit, en anglais:

  • main dépend de main.cpp
  • pour faire main, l'utilisation g++ à
    • compilation main.cpp,
    • fichier de sortie main,
    • recherche dans le répertoire /usr/local/include pour les en-têtes, il ne connaît pas

REMARQUE: il y a un onglet devant la ligne g++, PAS quatre espaces.

Espérons que ça aide.

1

Ils ont ceci dans leur documentation. Il semble que vous ayez juste à ajouter le chemin du fichier modèle (en-tête) à vos répertoires inclus dans votre Makefile.

1

Ce sont en fait des fichiers d'en-tête. Eigen est une bibliothèque de modèles, et la pratique suivante de modèle commun inclut la définition et la déclaration tous dans les fichiers d'en-tête, comme étant associé à la pratique non-template de conserver les définitions et les déclarations dans des fichiers séparés. Lorsque les décélérations et les définitions sont séparées, vous devez créer les fichiers sources contenant les définitions dans des fichiers d'objets de bibliothèque à associer à votre programme.

Ceci est déjà ostensiblement fait pour vous simplement par l'acte d'inclure les fichiers d'en-tête Eigen en premier lieu.

Tant que vous avez installé les fichiers d'en-tête Eigen dans votre chemin d'inclusion système, ils seront compilés dans votre programme sans aucune personnalisation de votre part. Si vous ne les avez pas installé dans votre chemin d'inclusion, il suffit de fournir le chemin complet g ++ comme si ...

g++ -I /path/to/eigen2/ source_file -o output_file 
0

Dans le cas où vous avez besoin de bibliothèque Fortran, est la commande ici, j'utilise

g ++ source de .cpp -o sortie -I /../ include -L /../lib/L/../lib64 -lcholmod -lmetis -lamd -lcamd -lccolamd -lcolamd -llapack -lgfortran -lblas

Je remplace le chemin réel avec ..

+0

je ne sais pas comment cela est lié à Eigen .. – Amro

Questions connexes