宿主機:Windows 7
集成開發環境:Real-Evo IDE 3.5.3
虛擬機:Ubuntu
目標機:x86php
Eigen是一個提供了線性代數、矩陣、向量操做等運算的C++庫,其中包含了不少算法。Eigen的License是MPL2,支持多平臺。
Eigen使用提供源碼的方式給用戶使用,在使用時只須要包含Eigen的頭文件便可進行使用。之因此採用這種方式,是由於Eigen採用模板方式實現,因爲模板函數不支持分離編譯,因此只能提供源碼而不是動態庫的方式供用戶使用,不過這也更方便用戶使用和研究。
Eigen包含一個核心模塊和多個附加模塊,每個模塊都有相對應的頭文件,若是須要用到其中的模塊,只須要包含相對應的頭文件便可。爲了方便用戶使用,源碼中提供了Dense以及Eigen兩個頭文件,用戶代碼包含這兩個頭文件便可訪問多個模塊。
須要的頭文件和功能以下表所示。
算法
通常的,能夠經過官方網站獲取要移植的第三方件的資源。Eigen的下載地址爲Eigen官網。
本篇中使用的Eigen版本爲eigen-3.3.4,下載後解壓文件以下圖所示。
函數
Eigen在編譯的過程當中並不生成庫文件,只會生成頭文件,所以在編譯的過程當中不會產生目標文件。具體的操做步驟參考Eigen源文件中的INSTALL文件。Eigen工程使用的編譯工具是cmake,使用cmake編譯以後會生成Makefile文件,編譯步驟以下圖所示。
在執行cmake編譯以後,會在源碼目錄下生成Makefile,執行make install命令則會生成相應的頭文件並安裝到執行cmake命令時指定的路徑下,操做步驟以下圖所示。
安裝路徑下的內容以下圖所示。
在使用Eigen時,只須要包含Eigen目錄下相應的文件便可。工具
因爲Eigen庫在編譯時並不生成庫文件,只是生成對應的頭文件。且RealEvo-IDE不支持cmake操做,所以SylixOS無需編譯,可直接將Linux平臺安裝生成的文件拷貝使用。在實際使用時,只要包含相對應的頭文件便可。測試
6.1 建立APP工程
建立SylixOS APP工程,操做以下圖所示。
新建include目錄,而後將在Linux下安裝生成的eigen3文件夾拷貝到SylixOS APP工程的include目錄下,工程結構以下圖所示。
在Eigen源碼目錄中的doc/examples/目錄下提供了測試代碼,本例中的代碼便是其中的測試代碼。
6.2 修改eigenTest.mk
修改eigenTest.mk文件,包含Eigen頭文件路徑,操做以下圖所示。
在測試過程當中,在編譯Eigen源碼目錄中的doc/examples/目錄下的Cwise_erf.cpp、Cwise_erfc.cpp、Cwise_lgamma.cpp這三個測試文件會報錯。可經過修改eigenTest.mk解決,解決方法以下圖所示。
關於在運行Eigen源碼目錄中的doc/examples/目錄下的matrixfree_cg.cpp會致使系統死機的緣由是因爲線程棧溢出致使的,具體解決方法可經過增長線程棧大小解決,關於如何修改線程棧大小可參考《SylixOS應用開發手冊》的線程管理章節。
經過修改eigenTest.mk查看出錯緣由,操做以下圖所示。
6.3 部署運行
編譯部署到SylixOS後,運行結果以下圖所示。
網站