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

海思3559环境采用cmake-gui交叉编译opencv及opencv_contrib GGZY 2024-02-23 16:20:11 327

前言

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

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

环境:
ubuntu:16.04
海思:海思3559
opencv: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.编译配置

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

编译器选择

选择第四项,点击“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.修改配置

修改CMAKE_INSTALL_PREFIX
这个是最后库的安装路径,文件夹是我自己创建的。

添加OPENCV_EXTRA_MODULE_PATH
也就是contrib的modules路径

添加CMAKE_FIND_ROOT_PATH
/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/

勾选BUILD_opencv_world库

这样编译出来的库就一个XXXXworld.so,而不是一堆库。

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

#define NO_DSHOW_STRSAFE

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.问题解决

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)

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

-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”

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的时间特别长,建议看会书,或者玩会游戏。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
GGZY
红包 1 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
GGZY
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区