4

我正在使用 Eigen 库,它承诺矩阵运算的矢量化。我不知道如何使用 Eigen 中给出的文件并编写一个 makefile。使用 Eigen 的源文件包括下面列出的文件,这些甚至不是头文件(它们只是一些文本文件)-

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

等等。在 Eigen 的网页上,它提到,为了使用它的功能,我不必构建项目,那么如何将这些文件包含在我的 makefile 中来构建我的项目。我的示例 main.c 文件如下所示。谁能告诉我如何为这个文件编写一个makefile makefile -

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

帮助!

4

4 回答 4

7

根据Eigen 的网站,这是一个只有标头的库。

这意味着没有任何东西可以编译或链接到它。相反,只要您将头文件放在标准位置(/usr/local/include在 *nix/Mac 上),那么您所要做的就是将该位置添加到您的预处理器构建步骤中。

假设您正在运行 *nix/Mac,并假设您已将所有内容安装到默认位置(例如#include <Eigen/Core>引用文件/usr/local/include/Eigen/Core),那么超级简单的 makefile 将如下所示:

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

其中用英语说:

  • main取决于main.cpp
  • 制作, main使用g++
    • 编译main.cpp
    • 输出文件main
    • 在目录中查找/usr/local/include它不知道的任何标题

注意:行前有一个 TAB g++,而不是四个空格。

希望有帮助。

于 2010-07-19T12:04:07.540 回答
2

他们在他们的文档中有这个。

g++ -I /path/to/eigen2/ my_program.cpp -o my_program 

There is no library to link to. 

看来您只需将模板(头)文件路径添加到 Makefile 中的包含目录即可。

于 2010-07-19T12:00:09.057 回答
1

这些实际上是头文件。Eigen 是一个模板库,遵循常见的模板做法,将定义和声明都包含在头文件中,与将定义和声明保存在单独文件中的非模板做法相反。当减速和定义分开时,您必须将包含定义的源文件构建到库对象文件中以链接到您的程序中。

这在表面上已经为您完成了,仅仅通过首先包含 Eigen 头文件的行为。

只要您已将 Eigen 头文件安装到系统包含路径中,它们就会被编译到您的程序中,而无需您进行任何自定义。如果您尚未将它们安装到包含路径中,只需提供 g++ 的完整路径,如下所示...

g++ -I /path/to/eigen2/ source_file -o output_file
于 2010-07-19T12:12:18.707 回答
0

如果您需要一些 fortran 库,这是我使用的命令

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

我用..替换实际路径

于 2011-06-18T21:23:30.967 回答