前言
在arm-linux上使用Eigen标准库,那就需要先使用交叉编译工具对Eigen源码进行交叉编译,然后才能在源码中调用Eigen库的接口函数。下面记录如何交叉编译用于ARM平台的Eigen库。
我使用的是安装了unbuntu16.04.5的vmware虚拟机,也安装了arm嵌入式平台的SDK,SDK里面包含交叉编译工具,例如 arm-linux-gnueabihf-gcc arm-linux-gnueabihf-g++。
1. 下载Eigen源码包
我下载的版本是eigen-3.3.5.tar.gz,在Linux的用户下新建work目录,并 cd 到work目录。
把 eigen-3.3.5.tar.gz 存放到 work 目录,并使用如下命令解压。
tar -xvzf eigen-3.3.5.tar.gz
源码解压到~/work/eigen-3.3.5目录,进入eigen-3.3.5目录,新建build文件夹,用于存放编译结果。
2. 安装 cmake 和 cmake-qt-gui
sudo apt install cmake
sudo apt install cmake-qt-gui
3. 使用cmake-gui工具配置并完成交叉编译
cmake-gui
执行上方的命令,启动cmake的配置界面。
第一步,选择源码目录
第二步,选择编译结果的存放目录
第三步,点击【Configure】按钮,会弹出如下界面,选择最后一项,然后点击【Next】按钮。
点击【Next】按钮,弹出如下界面。
上图中的红框中的五个位置是需要填写的。
Processor部分,我使用平台是32位,填写为arm。如果使用的平台为64位,就填写arm64。
Compilers部分,指定交叉编译工具,C和C++的交叉编译工具,完整的路径在上图中的绿色框中,你需要参考我的路径,给出你自己平台上的交叉编译工具的实际路径。
Target Root部分,该部分也是指定的,我也给出了完整的路径,请参考。
下图是我使用的Linux SDK的一个列表,及供参考。
配置完成后,点击右下方的【Finish】按钮,弹出如下界面。
先点击【Configure】按钮,再点击【Generate】按钮,提示 “Generating done” 说明cmake配置完成,关闭界面。
此时进入build目录,可以看到生成了一系列的目录和文件,Makefile就包含在其中。详见下图。
在build目录下,执行make,再执行sudo make install,安装Eigen的交叉编译结果。
从上图中,看到安装目录为 /usr/local/include/eigen3。在makefile中包含该路径就可以使用Eigen提供的接口了。
INCLUDES = -I./ -I/usr/local/include/eigen3
4. 编写代码测试
测试文件为eigen_test.cpp
#include <iostream>
#include <Eigen/Dense>
static void eigen_test()
{
Eigen::Matrix2d a;
a << 5,6,7,8;
Eigen::MatrixXd b(2,2);
b << 1,2,3,4;
std::cout << "a+b=\n" << a+b << std::endl;
}
int main(int argc, char *argv[])
{
eigen_test();
return 0;
}
编译命令
arm-linux-gnueabihf-g++ -I /usr/local/include/eigen3 -o eigen_test eigen_test.cpp
编译通过,说明一切顺利。
如果想进一步验证,需要把编译结果eigen_test push到arm开发板中,运行看结果。