海思3559环境采用cmake-gui交叉编译opencv及opencv_contrib

1 篇文章 0 订阅
1 篇文章 0 订阅


前言

海思3559环境采用cmake-gui交叉编译opencv及opencv_contrib过程以及出现的问题解决。

  1. 建议将问题解决部分的修改和配置完成后,再进行编译,避免浪费时间。
  2. 一定要弄一个翻墙的VPN,不然编译时,configure会有很多文件无法下载,导致编译失败。

环境:
ubuntu:16.04
海思:海思3559
opencv:opencv-4.2.0,opencv_contrib-4.2.0


一、环境

ubuntu:16.04
海思:3559a
opencv:4.2.0
opencv-contrib:4.2.0

安装cmake-gui:
先装cmake:sudo apt-get install cmake
再装cmake-gui:sudo apt-get install cmake-qt-gui

二、使用cmake-gui编译

1.打开cmake-gui

打开ubuntu的terminal终端,输入cmake-gui,打开cmake的gui界面。
在这里插入图片描述

2.编译配置

1.路径填写

在source code 填入解压后的opencv4.2.0路径;
在build 填入编译输出路径,这里我的路径是单独建立的文件夹opencv-build。
填写完成后点击“configure”。

2.编译器选择

在这里插入图片描述
选择第四项,点击“next",填写编译器路径。

Operation System — arm-himix200-linux
gcc ---- /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc
g++ ---- /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-g++
编译器路径需要根据自己ubuntu系统的编译器路径来填写。
在这里插入图片描述

3.修改配置

1.修改CMAKE_INSTALL_PREFIX

这个是最后库的安装路径,文件夹是我自己创建的。
在这里插入图片描述

2.添加OPENCV_EXTRA_MODULE_PATH

也就是contrib的modules路径
在这里插入图片描述

3.添加CMAKE_FIND_ROOT_PATH

/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/
在这里插入图片描述

4.勾选BUILD_opencv_world库

在这里插入图片描述这样编译出来的库就一个XXXXworld.so,而不是一堆库。

5.源代码修改

在opencv-4.2.0中的
modules/videoio/src/cap_dshow.cpp中的include “cap_dshow.hpp”上一行添加

#define NO_DSHOW_STRSAFE

在这里插入图片描述

6.cmake参数修改

在opencv4.2.0目录下,修改最顶层的CMakeList.txt,在include(cmake/OpenCVMinDepVersions.cmake)后面添加:

SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-pthread -ldl")  
SET(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-pthread -ldl") 

在这里插入图片描述

4.问题解决

1.zlib.h问题

fatal error: zlib.h: No such file or directory

对于该问题,博客上有的说可以直接在cmake-gui上面添加ZLIB_INCLUDE_DIR配置,这个我尝试过,是不行的,configure后,这个添加的配置会消失,不起作用,原因未知,因此配置项建议在CMakeLists.txt中添加,正确的解决方式应该是在CMakeLists.txt添加路径。
解决:

在opencv4.2.0目录下,修改最顶层的CMakeList.txt,找到ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR}),并在下面添加:ocv_include_directories(./3rdparty/zlib)
在这里插入图片描述

2.No suitable threading问题

common.cc:52:2: error: #error “No suitable threading library available.” #error "No suitable threading library available.

如果在顶层的CMakeLists.txt中添加了-pthread -ldl,应该不会出现此问题。(有些博客说的在cmake-gui添加额外CMAKE_CXX_FLAS,CMAKE_C_FLAS,因为configure后添加的配置会失效,原因未知,因此配置项建议在CMakeLists.txt中添加)

解决:

在opencv-4.2.0/3rdparty/protobuf/src/google/protobuf/stubs/common.cc 中添加下面这一行
#define HAVE_PTHREAD

3.-fpermissive问题

error: invalid conversion from ‘uchar* {aka unsigned char*}’ to ‘const JOCTET* {aka const char*}’ [-fpermissive]

在opencv4.2.0目录下,修改最顶层的CMakeList.txt,SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} “-pthread -ldl”)添加"-fpermissive"
在这里插入图片描述

4.png的引用未定义错误

undefined reference to `png_init_filter_functions_neon’

有博客给的解决方案是将BUILD_PNG勾选去掉,这个也是不可行的。默认的配置本来就没有勾选BUILD_PNG,正确解决方式如下:

修改:

找到3rdparty/libpng/CMakeLists.txt在最上面加上

SET(ARM 1)
SET(ENABLE_NEON 1)

在这里插入图片描述

6.编译

以上参数修改完成后,再次点击configure。
中间要下载一些东西,所以要保证有网络,而且需要翻墙才能configure完成。(不翻墙会出现下载失败,尝试多次失败后,弄了个VPN,才configure成功)。

出现configuring done后,且中间的配置参数没有红色后,点击generate,出现generating done即可。
在这里插入图片描述

注意:configure时,cmake-gui顶部会有出现红色,如下所示,提示

System is unkown to cmake…
Detected processor:…

这个是可以忽略的。
在这里插入图片描述

进入编译输出文件夹opencv-build,打开terminal终端,输入make,然后等待完成。make完成后,终端输入make install,到此opencv的交叉编译就完成了。
make的时间特别长,建议看会书,或者玩会游戏。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会抓狼的羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值