OpenCV交叉编译—arm(imx6ull,Cortex-A7)

这篇具有很好参考价值的文章主要介绍了OpenCV交叉编译—arm(imx6ull,Cortex-A7)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、版本说明:

opencv - 4.2.0(opencv4.5.4版本在交叉编译时会报错)
Ubuntu - 20.04 64位
gcc version 4.9.4 (Linaro GCC 4.9-2017.01)
arm板:imx6ull, Cortex - A7
内核挂载:nfs+SecureCRT

二、环境准备:

1)交叉编译器安装:

1、下载

https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabihf/

交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm

2、选择路径

根据自己Ubuntu来下载,下载完以后复制到自己要安装的路径,也可以不移动。
完成以后使用命令解压:

3、解压

sudo tar -vxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz

4、修改环境变量

解压完以后修改环境变量,使用命令:

sudo vi /etc/profile

打开这个文件以后,在最后面输入:

export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

其中,usr/local/arm/是在前文设置移动安装的路径,要根据自己的情况修改。

5、验证安装

修改好以后就保存退出,重启 Ubuntu 系统,交叉编译工具就安装成功了。
输入命令来验证安装:

arm-linux-gnueabihf-gcc -v

如果安装成功,会显示:

gcc version 4.9.4 (Linaro GCC 4.9-2017.01) 

2)安装cmake-gui:

命令:

sudo apt-get install cmake-gui  #安装cmake-gui

3)下载opencv源码:

地址:

https://codeload.github.com/opencv/opencv/zip/refs/tags/4.2.0

解压:

unzip opencv-4.2.0

创建文件夹用于存放编译文件:

mkdir opencv/build   

创建文件夹用于存放安装的opencv

mkdir opencv/opencv_install

三、编译安装:

1)打开cmake-gui界面

sudo cmake-gui
1、里面填写opencv的安装路径
2、里面填写刚刚创建的存放编译文件的文件夹的路径
3、点击“Configure”

交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm

在Unix Makefiles下,选择第三个,实测有效。

交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm

2)选择对应平台

/XXX/opencv-4.2.0/platforms/linux/xxx.cmake

注意要与自己的路径和自己的arm板子匹配
交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm

由于我的arm板是imx6ull,cortex—A7,选择这个,可以根据自己的板子选择下面对应的选项
交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm
点击Finish以后会到下面的界面:

3)继续配置

交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm

勾选 Advanced;
在Search中搜索BUILD_JPEGBUILD_PNG并分别打上对勾
交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm

搜索CMAKE_BUILD_TYPE ,在值中填写Release
交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm
搜索install,在“CMAKE_INSTALL_PREFIX”中将创建的用于存放安装的opencv的文件夹填写进去
交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm

搜索CMAKE_EXE_LINKER_FLAGS在值中填写-pthread -ldl -lrt
单击Configure,没有红色即说明没有错误;
交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm

单击Generate,即可关闭cmake-gui

4)最后一步

配置完成后先不要着急使用make编译
在/XXX/opencv4.2.0/3rdparty/protobuf/src/google/protobuf/stubs/common.cc这个文件下添加#define HAVE_PTHREAD宏定义。
回到刚刚创建的用于存放编译文件的文件夹:build中

5)编译:

使用命令:make -j4

可以看出,编译成功!
交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm

6)安装:

make install

交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm
安装成功
交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm

四、配置环境

步骤与正常安装OpenCV差不多

1)首先将OpenCV-arm的库添加到路径,从而可以让系统找到

sudo gedit /etc/ld.so.conf.d/opencv-arm.conf 

执行此命令后打开的可能是一个空白的文件,不用管,只需要写上:

/home/wcs/Downloads/opencv-4.2.0/opencv_install/lib

路径应与自己的相照应,否则报错
路径下为lib库,如下图
交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm

2)使得刚才的配置路径生效:

执行如下命令:

sudo ldconfig 

3)配置bash:

sudo gedit /etc/bash.bashrc

在文件后面添加:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/wcs/Downloads/opencv-4.2.0/opencv_install/lib/pkgconfig

交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm

4)执行如下命令使得刚才的配置生效:

source /etc/bash.bashrc 

5)拷贝pkgconfig文件

在编译时已配置了PKGCONFIG项,但最后安装在lib目录下并没有,将之前在Ubuntu上安装的OpenCv库(非交叉编译)目录下lib/pkgconfig文件夹拷贝到交叉编译的安装位置:/home/wcs/Downloads/opencv-4.2.0/opencv_install/lib目录下,pkgconfig目录下有个opencv4.pc文件,将其重命名为 opencv-arm.pc。
并更改里面的路径:
交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm

6)验证

首先使用命令:

pkg-config --modversion opencv-arm

成功输出版本号
交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm

再写个程序验证下

main.cpp:

#include <opencv2/opencv.hpp>
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
    printf("hello!!! \n"); //输出hello
    const char* imagename = "xiaomaolv.jpg";//此处为你自己的图片路径
    // 从文件中读入图像::
    cv::Mat img = cv::imread(imagename, 1);
	//如果读入图像失败
    if (img.empty()) {
        fprintf(stderr, "Can not load image %s\n", imagename);
        return -1;
    	}
    //显示图像
    cv::imshow("image", img);
    printf("successfully open image!\n");
	cv::waitKey();
    return 0;
}

使用命令交叉编译:

arm-linux-gnueabihf-g++ -std=c++11 `pkg-config --cflags opencv-arm` `pkg-config --libs opencv-arm` -lpthread -lrt -ldl  main.cpp -o main1

成功编译!
交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm

五、移植

1)压缩打包

进入安装文件夹,使用命令打包:

tar -czvf opencv4_2.tar.gz ./*

交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm

arm端可以创建一个目录,用来存放交叉编译好的opencv:

我的目录是:/usr/opencv

2)发送

对应的,发送到arm端的命令为:

sudo cp opencv4_2.tar.gz /home/wcs/Linux/nfs/rootfs/usr/opencv/

解压后可以看到:
交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm
将编译好的二进制可执行文件发过来:

sudo cp main1 /home/wcs/Linux/nfs/rootfs/test/ -f

进入相应的路径下./main运行一下:

出现错误:

error while loading shared libraries: libopencv_gapi.so.4.2: cannot open shared object file: No such file or directory

解决方法:

/usr/opencv/lib下面的.so文件全部拷贝到/lib目录下

cd /home/wcs/Linux/nfs/rootfs/usr/opencv/lib/  #进入目录下
cp ./* /lib 				#拷贝所有lib文件到/lib下

交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm
可以看出来,程序已经是可以正常运行了,但是还是报了什么错误,原因是使用了cvloadiamge之类的highgui中的功能,解决方法是在开发板上搭建起来QT库来显示GUI。

BTW

交叉编译opencv时如果出现以下错误:

arm-linux-gnueabihf/libc/usr/include/features.h:311:52: error: operator ‘&&’ has no right operand
#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
交叉编译opencv,工具安装,opencv,ubuntu,linux,arm开发,arm
在#if defined前面 加上
#define _FILE_OFFSET_BITS 64文章来源地址https://www.toymoban.com/news/detail-735845.html

到了这里,关于OpenCV交叉编译—arm(imx6ull,Cortex-A7)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【IMX6ULL驱动开发学习】02.IMX6ULL烧写Linux系统

    由于我买的是正点原子的IMX6ULL阿尔法开发板,但是我是看韦东山老师视频学习的驱动 所以这里我烧录的方法是按照韦东山老师的课程来的 这里给出烧写Linux系统用到的工具 链接:https://pan.baidu.com/s/1bD-xxn3K8xQAVkJSaJmTzQ 提取码:af6w 下载解压后,可以看到烧写工具 烧写Linux系统

    2024年02月13日
    浏览(59)
  • iMX6ULL驱动开发 | 让imx6ull开发板支持usb接口FC游戏手柄

    手边有一闲置的linux开发板iMX6ULL一直在吃灰,不用来搞点事情,总觉得对不住它。业余打发时间就玩起来吧,总比刷某音强。从某多多上买来一个usb接口的游戏手柄,让开发板支持以下它,后续就可以接着在上面玩童年经典游戏啦。  我使用的是正点原子的I.MX6U-ALPHA 开发板,

    2024年02月14日
    浏览(54)
  • 【IMX6ULL驱动开发学习】08.IMX6ULL通过GPIO子系统函数点亮LED

    通过GPIO子系统函数点亮LED 1、GPIO子系统函数 1.1 确定 led 的GPIO标号,查看内核中的gpiochip 查看 gpiochip ,以正点原子的IMX6ULL阿尔法开发板为例 查看原理图,发现led接的引脚是 GPIO1_IO3,对应 /sys/kernel/debug/gpio 中的 gpiochip0 组,gpiochip0 组从0开始算起, 所以 GPIO1_IO3 对应的标号就

    2024年02月10日
    浏览(78)
  • 【IMX6ULL驱动开发学习】22.IMX6ULL开发板读取ADC(以MQ-135为例)

    IMX6ULL一共有两个ADC,每个ADC都有八个通道,但他们共用一个ADC控制器 在imx6ull.dtsi文件中已经帮我们定义好了adc1的节点部分信息 注意 num-channels = 2; ,这个表示指定使用ADC1的两个通道,即通道1和通道2 如果你要使用多个ADC通道,修改这个值即可 配置ADC引脚的 pinctrl ,在自己的

    2024年02月12日
    浏览(63)
  • IMX6ULL ARM Linux开发板SD卡启动,SD卡的分区与分区格式化创建

    一、确定TF卡挂载到ubuntu上的设备名称及分区情况 1. 在ubuntu不接入TF卡的情况下, 使用df -lh /dev/sd*命令查看当前\\\"/dev/sd开头\\\"的设备。 2.将TF卡接入到ubuntu,再次使用df命令,进行查看,多出来的设备即是TF卡挂载到ubuntu的设备名称 如图所示,多出来的/dev/sdb1 /dev/sdb2即为TF卡的

    2024年02月04日
    浏览(42)
  • 【IMX6ULL驱动开发学习】05.IMX6ULL驱动开发_编写第一个hello驱动【熬夜肝】

    经过以下四个步骤,终于可以开始驱动开发了 01.安装交叉编译环境【附下载地址】 02.IMX6ULL烧写Linux系统 03.设置IMX6ULL开发板与虚拟机在同一网段 04.IMX6ULL开发板与虚拟机互传文件 一、获取内核、编译内核 二、创建vscode工作区,添加内核目录和个人目录 三、了解驱动程序编写

    2024年02月06日
    浏览(52)
  • 基于IMX6ULL的智能车载终端项目(代码开源)_imx6ull 开源 linux 项目 车载终端

    1.4 车载终端:杂项功能 车载终端是一个非常复杂且常用的装置,随着电车与自动驾驶技术的不断升级迭代,需求也与日俱增!我们往往需要在终端上附加许许多多其他的功能,比如:智能家居联动、车内环境监测、天气预报与网上浏览等! 作者强调:考虑到篇幅有限,作者

    2024年04月08日
    浏览(54)
  • 【IMX6ULL驱动开发学习】15.IMX6ULL驱动开发问题记录(sleep被kill_fasync打断)

    发现问题的契机: 学习异步通知的时候,自己实现一个功能:按键控制蜂鸣器,同时LED灯在闪烁 结果:LED好像也同时被按键控制了 最后调试结果发现: 应用层的 sleep 被驱动层的 kill_fasync 打断,所以sleep没有执行完就重新进入下一次循环了 修改代码后解决该问题 解决逻辑就

    2024年02月13日
    浏览(51)
  • IMX6ull SPI 协议

    1.1 SPI SPI 全称是 Serial Perripheral Interface,也就是 串行外围设备接口 。 SPI 是 Motorola 公司推出的一种同步串行接口 技术,是一种高速、 全双工的同步通信总线 , SPI 时钟频率相比 I2C 要高很多,最高可以工作 在 上百 MH z。 SPI 以主从方式工作,通常是有一个主设备和一个或多

    2024年02月12日
    浏览(43)
  • 【IMX6ULL驱动开发学习】03.设置IMX6ULL开发板与虚拟机在同一网段(设置开发板静态IP)

    为什么要设置IMX6ULL与虚拟机通信? 因为要把在虚拟机下编译的文件传到IMX6ULL开发板上运行 设置好同一网段,可以互ping后,可以参考这篇博客,实现开发板与虚拟机的文件互传 IMX6ULL开发板与虚拟机互传文件 一、设置windows有线网卡 二、配置虚拟机双网卡(原本有一个NAT网卡

    2024年02月07日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包