【发布时间】:2012-12-04 14:22:38
【问题描述】:
最近,我编译了 Eigen3 并用它在 Windows 上做一些线性代数任务。
但我想知道为什么 Eigen3 不需要链接额外的 lib 或 DLL(我只需要包含它的头文件)
Eigen 是否在编译时进行所有计算?还是我错过了一些理解?
如果有,该类库的分类名称是什么
【问题讨论】:
标签: eigen
最近,我编译了 Eigen3 并用它在 Windows 上做一些线性代数任务。
但我想知道为什么 Eigen3 不需要链接额外的 lib 或 DLL(我只需要包含它的头文件)
Eigen 是否在编译时进行所有计算?还是我错过了一些理解?
如果有,该类库的分类名称是什么
【问题讨论】:
标签: eigen
像所有 C++ 模板库一样,Eigen 完全包含在头文件中,并且每次都插入到源文件中。因此它不包含任何 cpp 文件,这些文件将被编译为 dll。
当类在头文件中声明并在 cpp 文件中实现时,dll/lib 和头文件之间的区别就出现了。那么实现部分总是一样的,可以从dll中加载。
但是,在模板库中,类还没有完成,因为它们依赖于您传递给它们的模板参数。例如如果你写Matrix<float, 17, 19>,你会创建一个新的完整类,它有一个全新的实现,无法从 dll 加载。
这也使得使用大量模板(如许多不同的固定大小矩阵)的 c++ 程序非常庞大。
【讨论】: