Hi3519V101移植opencv-2.4.9

来源:互联网 发布:马扎克系统编程 编辑:程序博客网 时间:2024/05/16 23:56

目录

  • 目录
  • 前言
  • 环境
  • 交叉编译
  • 总结
  • 补充

前言

从来不懂图像算法,但是为了功能,只能硬着头皮研究opencv,工作了才知道其实生活才刚刚开始,未来是坎坷而光明的吧!
本篇博客来自参考易百纳论坛

环境

PC:Ubuntu16.04
交叉编译工具链:arm-hisiv500-linux
OpenCV版本:opencv-2.4.9.zip

交叉编译

  1. 解压:unzip opencv-2.4.9.zip
    cmd:tree -L 1    .    ├── 3rdparty    ├── apps    ├── cmake    ├── CMakeLists.txt    ├── data    ├── doc    ├── include    ├── index.rst    ├── LICENSE    ├── modules    ├── platforms    ├── README.md    └── samples
  1. 安装cmake-gui
    sudo apt-get install cmake-gui

  2. 创建build目录用于编译、output目录用于输出安装目录:

    mkdir /opt/opencv2.4.9/build    mkdir /opt/opencv2.4.9/output
  1. 执行cmake-gui

    • 出现如下界面:
      Cmake界面
    • 点击Browse Source选择刚刚解压的opencv2.4.9目录
    • 点击Browse Build选择刚刚建立的opencv2.4.9/build目录
    • 点击configure,此时出现对话框:
      configure
    • 选择Specify options for cross-compilingnext
    • 在Operating System填写 arm-hisiv500-linux
      C填写arm-hisiv500-linux-gcc
      C++填写arm-hisiv500-linux-g++
    • 点击configure,直到出现Configuration done

      问题:Error in configuration process,project files may be invalid
      错误1

      解决方法:
      search中,取消选项:WITH_CUDAWITH_OPENCL,再次configure就不会出现问题。
      参考链接

      在出现的列表中,search对应的文本框中输入CMAKE_INSTALL_PREFIX,修改为自己的output目录,我的目录是/opt/opencv2.4.9/output,如下:
      search

    • Generate——->Generation done,即可关闭cmake软件

  2. 进入build目录执行make
    cd /opt/opencv2.4.9/build
    make

    问题1:
    ../../lib/libopencv_core.so:对‘pthread_once’未定义的引用    ../../lib/libopencv_core.so:对‘pthread_spin_lock’未定义的引用    ../../lib/libopencv_core.so:对‘pthread_spin_unlock’未定义的引用    ../../lib/libopencv_core.so:对‘pthread_spin_init’未定义的引用    ../../lib/libopencv_core.so:对‘pthread_spin_trylock’未定义的引用    ../../lib/libopencv_core.so:对‘pthread_spin_destroy’未定义的引用

解决方法:

vi CMakeCache.txt#找到CMAKE_EXE_LINKER_FLAGS,修改如下:CMAKE_EXE_LINKER_FLAGS:STRING= -lpthread -lrt
  1. make install
    之后,在/opt/opencv2.4.9/output目录下会生成安装编译好的库

总结

遇到Error in configuration process,project files may be invalid问题的时候还以为是cmake-gui的问题,以前编译成功后没有记录,结果忘记怎么解决这个问题了,甚至还重载了Ubuntu16.04,所以不做记录真的是一件很没有效率的事情,谨记教训,勇敢前行!

补充

问题2:gnueabihf/bin/ld: ../../3rdparty/lib/libzlib.a(crc32.obj): relocation R_ARM_THM_MOVW_ABS_NC againsta local symbol’ can not be used when making a shared object; recompile with -fPIC
博主记:2017/12/25,使用
arm-linux-gnueabihf-gcc编译opencv2.4.9时出现这个问题。
原因:zlib编译需要添加
-fPIC选项
解决方法:
vi 3rdparty/zlib/CMakeFiles/zlib.dir/flags.make
添加:
C_FLAGS=-W -Wall…
C_FLAGS = -O3 -fPIC -W -Wall…`
同理,后面编译出现同样问题如下:

relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC

解决方法同上。注意:修改有一定要make clean后再重新make -j4

原创粉丝点击