zoukankan      html  css  js  c++  java
  • 在ubuntu18.04上交叉编译opencv2.4.9

    公司项目中用到了opencv,但是当时项目比较着急,因此同事直接给了编译好的opencv的库,自己并没有尝试从头去编译,项目结束后有点时间,于是自己尝试去从头交叉编译opencv,现在把过程记录一下,后面再需要对OpenCV别的版本进行交叉编译的时候可以直接看自己的笔记。

    环境

    PC:vmware + ubuntu18.04

    交叉编译工具链:arm_hisiv300_linux(HISI3536的交叉编译工具)

    opencv版本:opencv-2.4.9.zip

    交叉编译

    下载opencv2.4.9源码,然后解压,

    安装cmake-gui

        

    1 sudo apt-get install cmake-gui

    创建build文件用于编译opencv,创建install文件夹作为输出目录

    1 cd opencv-2.4.9
    2 mkdir build
    3 mkdir install

    然后执行cmake-gui,出现如下界面

    选择source code为opencv2.4.9的路径,选择build the binaries为我们刚才新创建的build文件夹。

    然后点击configure出现如下画面

    选择specify options for cross-compiling,next,然后出现如下界面。

    在operating system填写arm-hisiv300-linux,

    Compiler C选择自己的arm-hisiv300-linux-gcc的路径,

    C++编译器选择arm-hisiv300-linux-g++的安装路径,

    Target root选择自己的交叉交叉编译工具所在的文件夹,并且选择search in Target root ,then native system.

    然后点击configure,这时候会出现error inconfiguration process,project files may be invalid.

    解决方法是在search中搜索CUDA,把WITH_CUDA取消掉,搜索opencl把WITH_OPENCL去掉,再次选择就不会出现问题。

    在search中搜索install,把CMAKE_INSTALL_PREFIX修改为自己刚才创建的install文件夹,

    如果想让我们编译出来的opencv库为静态链接库的话,可以在search里面搜索shared,把BUILD_SHARED_LIBS去掉,这样编译出来的opencv库就是.a结尾的静态链接库了。

    另外,configure的过程中可能还会有下面的提示

    然后很多编译opencv的博客教程在编译opencv的时候会有一步: 从网上zlib、libjpeg、libpng、tiff、ffmjpeg的源码,然后对这几个库的源码进行交叉编译,实际上不用这样做,我们下载的opencv源码里面有这几个库的源码,我们只需要在cmake-gui上把相应的选项选上,这样编译opencv的过程中会把这个库编译出来(第三方库生成在build3rdpartylib),例如

    这样之后就能产生jpeg库了,同样的方法可以编译zlib等其他几个库,

    然后点击generate,然后就可以关闭cmake_gui了,

    然后开始编译

    1 cd build/
    2 make

    编译的过程中会报对pthread_once未定义的引用,对pthread_spin_lock未定义的引用等错误,

    解决方法:打开build文件夹下的CMakeCache.txt,定位到190行左右,把CMAKE_EXE_LINKER_FLAGS:STRING =改为CMAKE_EXE_LINKER_FLAGS:STRING = -pthread -lrt

    然后make

    然后make install

    这样就会在install文件夹下生成opencv库,在install的share-3rdparty文件夹下会生成zlib jpeg等几个库。

    测试验证

    编译完opencv之后想在项目中对自己编译完的OpenCV库进行验证,出现错误,

    刚开始觉得是自己编译的opencv存在问题,于是一遍又一遍的从头编译,问题依然存在,差点要重新安装了ubuntu14版本重新编译,直到搜索到下面的答案

    原来是因为imgproc是依赖于core的,被依赖的库要放到后面,于是修改自己的makefile,把-loencv_core放到了-lopencv_imgproc的后面,于是编译通过,程序测试运行通过.

    success!

    补充:有一次在HI3559A上要用opencv,把库编译出来加到工程里面编译的时候提示很多未定义,这时候把-lopencv_imgcodecs  -lopencv_imgproc 放到最前面就好了,就是因为这两个库依赖core库,所以要把它们放到core库前面。

    作者:cumtchw
    出处:http://www.cnblogs.com/cumtchw/
    我的博客就是我的学习笔记,学习过程中看到好的博客也会转载过来,若有侵权,与我联系,我会及时删除。

  • 相关阅读:
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    72. Edit Distance
    583. Delete Operation for Two Strings
    582. Kill Process
    indexDB基本用法
    浏览器的渲染原理
    js实现txt/excel文件下载
    git 常用命令
    nginx进入 配置目录时
  • 原文地址:https://www.cnblogs.com/cumtchw/p/11102530.html
Copyright © 2011-2022 走看看