最近、Eigen3 をコンパイルし、それを使用して Windows で線形代数のタスクを実行しました。
しかし、Eigen3 が追加の lib または DLL をリンクする必要がないのはなぜでしょうか (そのヘッダーを含める必要があるだけです)。
Eigen はコンパイル時にすべての計算を行いますか? それとも、何かを理解していませんか?
もしそうなら、この種のライブラリのカテゴリ名は何ですか
最近、Eigen3 をコンパイルし、それを使用して Windows で線形代数のタスクを実行しました。
しかし、Eigen3 が追加の lib または DLL をリンクする必要がないのはなぜでしょうか (そのヘッダーを含める必要があるだけです)。
Eigen はコンパイル時にすべての計算を行いますか? それとも、何かを理解していませんか?
もしそうなら、この種のライブラリのカテゴリ名は何ですか
すべての C++ テンプレート ライブラリと同様に、Eigen はヘッダー ファイルに完全に含まれており、毎回ソース ファイルに挿入されます。そのため、dll にコンパイルされる cpp ファイルは含まれていません。
dll/lib とヘッダーの違いは、クラスがヘッダーで宣言され、cpp ファイルで実装されている場合に発生します。次に、実装部分は常に同じで、dll からロードできます。
ただし、テンプレート ライブラリでは、クラスは渡されたテンプレート パラメーターに依存するため、クラスは完成していません。たとえば、 と書くMatrix<float, 17, 19>
と、完全に新しい実装を持つ新しい完全なクラスが作成されますが、これは dll からロードできませんでした。
これにより、多くのテンプレート (さまざまな固定サイズのマトリックスなど) を使用する C++ プログラムも非常に大きくなります。