交叉编译OpenCV2.4.11至ARM架构

    技术2022-07-31  80

    交叉编译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, 选择第四项后点击next,OS随意命名即可,C、C++编译器、Target Root一定要选择正确: 点击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:

    参考此处,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:

    参考此处,https://blog.csdn.net/qq_30155503/article/details/79983630?ops_request_misc=%7B%22request%5Fid%22%3A%22159366888219724845024138%22%2C%22scm%22%3A%2220140713.130102334.pc%5Fall.%22%7D&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上交叉编译opencv及opencv_contr。 修改build目录下的CMakeCache.txt,在CMAKE_EXE_LINKER_FLAGS:STRING=后添加-lpthread -ldl -lrt。继续make。

    bug3:

    参考此处,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<stdio.h> #include<opencv2/opencv.hpp> #include<opencv2/highgui/highgui.hpp> 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 admin@192.168.1.105:/home/admin/armopencv_test 5.进入开发板系统。ssh admin@192.168.1.105 6.解压install,直接./test.out会报错 7.需要先export LD_LIBRARY_PATH=/home/admin/armopencv_test/install2/lib 可以参考:https://www.jianshu.com/p/a62e1d327023 之后再./test.out就可以成功运行。

    Processed: 0.012, SQL: 10