zoukankan      html  css  js  c++  java
  • ubuntu16.04-交叉编译opencv3.4.6

    0、前言

    • 在要移植opecv和SeetaFaceEngine-master到ARM板子上运行的所有步骤之前,有几点需要注意的:
    • 查看板子运行的Kernel版本
    • 交叉编译工具链的gcc版本,关键就是工具链里库所能支持的最低内核版本
      • 可以用file xxx,查看(xxx是可执行程序,你可以随意编写一个简单helloworld来编译后,测试)
      • 工具链的版本会影响到opecv、seetaface的编译工程,以及编译出来的opecv库、seetaface最终的可执行文件能否在板子的内核里跑起来
    • 文件系统系统里的lib库最好用与上面提到的同一个工具链里的库
    • 下面操作不要在共享文件夹目录中进行,在Ubuntu其他原生目录中进行
    • 下篇交叉编译seetafaceengine-master:https://www.cnblogs.com/xz-954042850-qq/p/12599446.html

    1、前提准备

    • Linux操作系统:Ubuntu 16.04
    • OpenCv版本:3.4.6
    • 交叉工具链:arm-2014.05-29-arm-none-linux-gnueabi-,gcc version 4.8.3
    • 目标平台:ARM
    • 板       子:study210,kernel:2.6.35
    • SoC       :S5PV210
    • 编译时间:2020/3/30

    2、下载安装

    • opencv官网下载opencv(Source版本)
    • 下载交叉编译工具链
    • 安装工具链
      • 解压:tar -xvjf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz
      • vim /etc/profile
      • 在末尾添加工具链路径进环境变量PATH
        • export PATH=xxxxx:$PATH
      • 同步生效一下:
        • source /etc/profile
      • 说明:
        • 编译工具:xxx/arm-2014.05/bin/arm-none-linux-gnueabi-gcc、xxx/xxx/arm-2014.05/bin/arm-none-linux-gnueabi-g++
        • 板子根文件系统需要的交叉编译库:arm-2014.05/arm-none-linux-gnueabi/libc/lib/
    • 安装cmake
      • apt-get install cmake(当然除了这种方式,还可以下载cmake压缩包来解压安装)
      • cmake --version查看版本,尽量安装3.1以上的版本,我的是3.5.1
    • 安装cmake-qt-gui
      • sudo apt-get install cmake-qt-gui
      • 利用cmake-gui命令进入cmake的gui界面进行一些配置,例如交叉编译工具链的配置
    • 安装依赖库:
    • sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev

    3、在opencv源码目录中创建一个文件夹,用于放置编译输出的文件,以免污染opencv源码目录

    • mkdir build

    4、命令行输入:cmake-gui,进入界面设置

      说明:Where is the source code对应opencv的文件夹,Where to build the binaries对应opencv存放编译好的配置文件等信息的文件夹(刚才创建的build文件夹)

      

      选择第四项,交叉编译:

      

      注意:Linux要大写首字母,不能写成linux。Target Root代表标准库与头文件的搜索起始位置,可以理解为对应交叉编译工具的根目录

      下图中的工具链是没选对的,C:/usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-gcc,C++:/usr/local/arm/arm-2014.05/bin/arm-none-linux-gnueabi-g++

      Target Root:/usr/local/arm/arm-2014.05/bin/

      这里我写的路径不一定跟你的一样,因为工具链安装的位置不同,你要灵活点。

      

      

      我的opencv编译后的存放路径,也就是库路径:/root/opencv_dir/lib_opencv_dir(这是自己新建的)

       

    5、编译

      sudo make -j4-------这是在上面自己创建的build中执行的

      也许会报错:

      

      解决方法:修改路径,例如我的:/root/opencv_dir/opencv-3.4.6/3rdparty/zlib(当然在这步之前,你要find / -name zlib.h查看zlib.h是否在那个目录存在)

      有的在make编译前勾选了BUILD_ZLIB,但是在编译之后,在cmake-gui这里找不到这zlib的头文件路径,这情况我没解决。

      

      此后,还会貌似还会有其他报错问题,都可以通过将错误信息粘贴到百度查找解决方法,粘贴的信息应局部、全部都试试,例如对于上面的错误,局部信息就是fatal error zlib.h:No such or file or directory

      make成功后……

    6、安装

      sudo make install

      此后,在上面对应自己指定的文件夹中就可以看到编译出来的opencv库了,例如我的是:/root/opencv_dir/lib_opencv_dir

      

      通过file xxx.so可以查看是否交叉编译成功了

      

    7、配置一些OpenCV的编译环境

    • 将OpenCV的库添加到路径,让系统找到
      • sudo gedit /etc/ld.so.conf.d/opencv.conf
      • 在末尾添加:/root/opencv_dir/lib_opencv_dir/lib--------这是我编译到的我的opencv库路径,你要填你的
      • 右上角点击保存,然后退出
      • sudo ldconfig-----让刚才的配置生效
    • 配置bash
      • 在末尾添加:----------------------------------------------------------看清楚,对应填好你的,别盲目抄

        PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/root/opencv_dir/lib_opencv_dir/lib/pkgconfig
        export PKG_CONFIG_PATH

      • 右上角点击保存,然后退出
      • source /etc/bash.bashrc---------------------------------------------同步让刚才配置生效
    • 更新
      • sudo updatedb

      到这里,opencv交叉编译,配置已完成!!!

    体会小结:

    • 在这编译过程中体会到了交叉编译工具链的版本选择真的非常重要,这不仅会影响到opecv的编译,还会影响到seetaface的编译以及,最终在arm板子上执行seetaface编译出来的可执行文件。
    • 希望大家遇到报错信息时,要冷静查看问题根源,百度解决,虽然有的百度找不到直接答案,但是结合百度出来的多篇博客,会对你的报错信息问题定位还是很有帮助的,结合分析,然后自己尝试解决,我也是这样走过来的。
    • 你的点赞便是我的动力!!!
  • 相关阅读:
    AQS简介
    原子类案例
    保证线程安全的三个方面
    CAS无锁机制
    乐观锁与悲观锁
    读写锁简介
    重入锁简介
    并发队列Queue
    报错Cannot resolve com.mysq.jdbc.Connection.ping method. Will use 'SELECT 1' instead 问题记录
    Springboot中MyBatis 自动转换 map-underscore-to-camel-case
  • 原文地址:https://www.cnblogs.com/xz-954042850-qq/p/12598388.html
Copyright © 2011-2022 走看看