4
最近,我編譯Eigen3並用它在Windows上做一些線性代數任務。爲什麼Eigen不需要鏈接.lib或dll?
但我不知道爲什麼Eigen3並不需要額外的鏈接lib或DLL(我只需要包括它的頭)
不徵辦所有計算在編譯時?或者我想念一些東西?
如果是這樣,這是什麼樣的圖書館
最近,我編譯Eigen3並用它在Windows上做一些線性代數任務。爲什麼Eigen不需要鏈接.lib或dll?
但我不知道爲什麼Eigen3並不需要額外的鏈接lib或DLL(我只需要包括它的頭)
不徵辦所有計算在編譯時?或者我想念一些東西?
如果是這樣,這是什麼樣的圖書館
像所有的C++模板庫的類別名稱,徵完全包含在頭文件和源文件每次插入。所以它不包含任何cpp文件,這些文件將被編譯爲一個dll。
當在頭文件中聲明類並在cpp文件中實現類時,會出現dll/lib和頭文件的區別。然後實現部分總是相同的,可以從一個DLL加載。
但是,在模板庫中,類沒有完成,因爲它們依賴於傳遞給它們的模板參數。例如如果您編寫Matrix<float, 17, 19>
,則會使用全新的實現創建一個新的完整類,該類不能從dll加載。
這也使得使用大量模板(如許多不同的固定大小的矩陣)的C++程序非常大。
謝謝貝尼貝拉。我有另一個問題。這種類型庫有一些共同的缺點嗎?例如增加我的程序的大小? – tirth
是的,請參閱編輯。 (我其實還在打字) – BeniBela
好的,非常感謝! – tirth