PC机为x86架构,目标平台为ARM架构,首先需要安装x86至ARM平台的交叉编译链。需要注意的是,编译链上C库的版本需要和目标平台上的C库版本兼容。我起初参考其他博客直接apt-get工具链,之后交叉编译会报libc的问题,所以最好查看目标平台的C库版本后去linaro官网下载对应版本的交叉编译链并解压。我这里下载的版本为gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu。
Opencv以及许多库需要通过CMake创建MakeFile,直接sudo apt-get install cmake。
在home目录创建文件夹compile_eigen3_2,一个子文件夹arm_eigen,arm_eigen内再创建build和install两个子文件夹。eigen3.2.10源码下载并解压至compile_eigen3_2文件夹内。
在任意位置打开终端,输入cmake-gui。设置source code路径为/home/andrew/compile_eigen3_2/eigen-3.2.10,build路径为/home/andrew/compile_eigen3_2/arm_eigen3/build。点击configure, 选择第四项后点击next,OS随意命名即可,C、C++编译器、Target Root一定要选择正确: 点击finish。search位置输入CMAKE_INSTALL_PREFIX,修改编译后的路径为/home/andrew/compile_eigen3_2/arm_eigen3/install,这里默认为/usr/local,不修改会影响主机上原有库的使用。再次点击configure并generate,完毕后关闭cmake-gui。
进入build目录下打开终端,输入make开始编译,应该不会报错。
直接输入sudo make install命令安装,应该不会报错。
1.在install目录下编写一个test.cpp:
#include<iostream> #include<Eigen/Dense> using namespace Eigen; int main() { Matrix2d a; a<<1,2, 3,4; MatrixXd b(2,2); b<<2,3, 1,4; std::cout<<"a+b=\n"<<a+b<<std::endl; return 0; }2.还是在install目录下,交叉编译该程序: /home/andrew/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ eigentest.cpp -I./include/eigen3 -o test.out 得到test.out 3.将intall压缩为tar格式。 4.在arm_eigen3目录下,将install压缩包传到开发版。scp install.tar admin@192.168.1.105:/home/admin/armeigen_test 5.进入开发板系统。ssh admin@192.168.1.105 6.解压install,由于eigen库只有头文件,不需要export LD_LIBRARY_PATH。 7.执行./test.out,成功运行。