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