1. 程式人生 > >移植Eigen庫到SylixOS下及使用方法

移植Eigen庫到SylixOS下及使用方法

Eigen 中間件移植 SylixOS

1. 開發環境

宿主機:Windows 7
集成開發環境:Real-Evo IDE 3.5.3
虛擬機:Ubuntu
目標機:x86

2. Eigen簡介

Eigen是一個提供了線性代數、矩陣、向量操作等運算的C++庫,其中包含了很多算法。Eigen的License是MPL2,支持多平臺。
Eigen使用提供源碼的方式給用戶使用,在使用時只需要包含Eigen的頭文件即可進行使用。之所以采用這種方式,是因為Eigen采用模板方式實現,由於模板函數不支持分離編譯,所以只能提供源碼而不是動態庫的方式供用戶使用,不過這也更方便用戶使用和研究。
Eigen包含一個核心模塊和多個附加模塊,每一個模塊都有相對應的頭文件,如果需要用到其中的模塊,只需要包含相對應的頭文件即可。為了方便用戶使用,源碼中提供了Dense以及Eigen兩個頭文件,用戶代碼包含這兩個頭文件即可訪問多個模塊。

需要的頭文件和功能如下表所示。
技術分享圖片

3. 資源獲取

一般的,可以通過官方網站獲取要移植的第三方件的資源。Eigen的下載地址為Eigen官網。
本篇中使用的Eigen版本為eigen-3.3.4,下載後解壓文件如下圖所示。
技術分享圖片

4. Linux平臺編譯及安裝

Eigen在編譯的過程中並不生成庫文件,只會生成頭文件,因此在編譯的過程中不會產生目標文件。具體的操作步驟參考Eigen源文件中的INSTALL文件。Eigen工程使用的編譯工具是cmake,使用cmake編譯之後會生成Makefile文件,編譯步驟如下圖所示。
技術分享圖片
在執行cmake編譯之後,會在源碼目錄下生成Makefile,執行make install命令則會生成相應的頭文件並安裝到執行cmake命令時指定的路徑下,操作步驟如下圖所示。

技術分享圖片
安裝路徑下的內容如下圖所示。
技術分享圖片
在使用Eigen時,只需要包含Eigen目錄下相應的文件即可。

5. SylixOS平臺編譯

由於Eigen庫在編譯時並不生成庫文件,只是生成對應的頭文件。且RealEvo-IDE不支持cmake操作,因此SylixOS無需編譯,可直接將Linux平臺安裝生成的文件拷貝使用。在實際使用時,只要包含相對應的頭文件即可。

6. Eigen庫使用

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後,運行結果如下圖所示。
技術分享圖片


移植Eigen庫到SylixOS下及使用方法