交叉编译OpenCV2.4.11至ARM架构

交叉编译OpenCV2.4.11至ARM架构

参考的博客

https://www.jianshu.com/p/0fcdce428d8f
https://www.douban.com/group/topic/82625416

1.下载交叉编译链

PC机为x86架构,目标平台为ARM架构,首先需要安装x86至ARM平台的交叉编译链。需要注意的是,编译链上C库的版本需要和目标平台上的C库版本兼容。我起初参考其他博客直接apt-get工具链,之后交叉编译会报libc的问题,所以最好查看目标平台的C库版本后去linaro官网下载对应版本的交叉编译链并解压。我这里下载的版本为gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu。

2.安装CMake

Opencv以及许多库需要通过CMake创建MakeFile,直接sudo apt-get install cmake。

3.下载OpenCV源码

在home目录创建文件夹compile_opencv,一个子文件夹arm_opencv,arm_opencv内再创建build和install两个子文件夹。OpenCV2.4.11源码下载并解压至compile_opencv内。

4.配置工具链

在任意位置打开终端,输入cmake-gui。设置source code路径为/home/andrew/compile_opencv2/opencv-2.4.11,build路径为/home/andrew/compile_opencv2/arm_opencv/build。点击configure,
交叉编译OpenCV2.4.11至ARM架构_第1张图片
选择第四项后点击next,OS随意命名即可,C、C++编译器、Target Root一定要选择正确:
交叉编译OpenCV2.4.11至ARM架构_第2张图片点击finish。search位置输入BUILD_ZLIB,勾选;再输入CMAKE_INSTALL_PREFIX,修改编译后的路径为/home/andrew/compile_opencv2/arm_opencv/install,这里默认为/usr/local,不修改会影响主机上原有库的使用。再次点击configure并generate,完毕后关闭cmake-gui。

5.build目录下make

进入build目录下打开终端,输入make开始编译。准备面对狂风暴雨。

bug1:

交叉编译OpenCV2.4.11至ARM架构_第3张图片参考此处,https://blog.csdn.net/lc250123/article/details/78900455,需要修改opencv source中的CMakeLists.txt,注意这里是改opencv source的内容。我这里的文件夹路径是/home/andrew/compile_opencv2/opencv-2.4.11/3rdparty。修改该文件夹下各个子文件夹中的CMakeLists.txt,去掉set(CMAKE_C_FLAGS “${CMAKE_C_FLAGS} -fPIC”)外部的判别条件。继续make。

bug2:

交叉编译OpenCV2.4.11至ARM架构_第4张图片参考此处,https://blog.csdn.net/qq_30155503/article/details/79983630?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159366888219724845024138%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159366888219724845024138&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v3~pc_rank_v2-2-79983630.first_rank_ecpm_v3_pc_rank_v2&utm_term=Ubuntu%E4%B8%8A%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91opencv%E5%8F%8Aopencv_contr。
修改build目录下的CMakeLists.txt,在CMAKE_EXE_LINKER_FLAGS:STRING=后添加-lpthread -ldl -lrt。继续make。

bug3:

交叉编译OpenCV2.4.11至ARM架构_第5张图片参考此处,https://blog.csdn.net/weixin_30279671/article/details/98704193。修改/home/andrew/compile_opencv2/arm_opencv/build/modules/contrib/CMakeFiles/opencv_contrib.dir/flags.make文件,删掉-Werror=address。继续make,编译通过。

6.sudo make install

直接输入sudo make install命令安装,应该不会报错。进入install/lib查看任意库的信息,可以看到已经是ARM架构下的库。
在这里插入图片描述

7.上板测试

1.在install目录下添加一张图片命名为1.jpg,编写一个test.cpp:

#include
#include
#include
using namespace cv;
int main(){
    Mat image=imread("1.jpg");
    
    printf("FXXK world!");    
    imwrite("2.jpg",image);
    return 0;

}

2.还是在install目录下,交叉编译该程序:
/home/andrew/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ test.cpp -I./include -o test.out -L./lib -lopencv_highgui -lopencv_imgproc -lopencv_core -pthread -ldl -lrt
得到test.out
3.将intall压缩为tar格式。命名后面可能是install2。
4.将install压缩包传到开发版。scp install2.tar [email protected]:/home/admin/armopencv_test
5.进入开发板系统。ssh [email protected]
6.解压install,直接./test.out会报错
在这里插入图片描述
7.需要先export LD_LIBRARY_PATH=/home/admin/armopencv_test/install2/lib
可以参考:https://www.jianshu.com/p/a62e1d327023
之后再./test.out就可以成功运行。
在这里插入图片描述

你可能感兴趣的:(交叉编译)