经验分享华为海思Hi35xx系列ARM32交叉编译opencv

Posted 极智视界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经验分享华为海思Hi35xx系列ARM32交叉编译opencv相关的知识,希望对你有一定的参考价值。

  本教程详细记录了华为海思Hi35xx系列ARM32交叉编译opencv、zlib、libpng的方法。是上一篇x86环境源码编译opencv(【经验分享】ubuntu源码编译opencv)的姊妹篇。


1、编译环境

  海思Hi35xx的板子需要ARM32位的opencv,我的编译环境是ubuntu1804服务器上使用 arm-himix200-gcc编译器进行交叉编译。与海思交互开发可采用nfs搭建,可参考我之前写过的一篇华为昇腾的板子交互开发配置的教程:【嵌入式AI】atlas500与虚拟机ubuntu交互配置


2、资料包下载

  opencv下载网址:https://opencv.org/。

  用到的海思编译工具链包如下(搞不到资源的可以联系我):
在这里插入图片描述


3、交叉编译

  首先安装海思交叉编译工具链:

./arm-himix200-linux.install

  开始交叉编译:

tar xzvf opencv-3.4.6.tar.gz 
mkdir hisi_build 
cd hisi_build

  新建文件 arm-himix200.camke,在里面添加如下内容(相关路径根据实际设置)。

SET(CMAKE_SYSTEM_NAME Linux)  
SET(CMAKE_CXX_COMPILER arm-himix200-linux-g++) 
SET(CMAKE_C_COMPILER arm-himix200-linux-gcc) 
SET(CMAKE_FIND_ROOT_PATH /opt/hisi-linux/x86-arm/arm-himix200-linux/bin)

  生成makefile

cmake .. -DCMAKE_TOOLCHAIN_FILE=./arm-himix200.cmake -DCMAKE_INSTALL_PREFIX=./lib -DCMAKE_INSTALL_INCLUDEDIR=./include -DCMAKE_BUILD_TYPE=Release -DBUILD_JPEG=ON -DWITH_1394=OFF -DWITH_GTK=OFF
sudo make 
sudo make install

进入报错集锦五佳球

报错集锦五佳球 第五位

​  opencv-3.4.6/3rdparty/libpng/pngstruct.h:30:18: fatal error: zlib.h: No such file or directory

解决方法

  修改 opencv-3.4.6/3rdparty/libpng 下的 CMakeLists.txt

  在 ocv_include_directories("${CMAKE_CURRENT_SOURCE_DIR}" ${ZLIB_INCLUDE_DIRS}) 前添加

set(ZLIB_INCLUDE_DIRS "/home/share/opencv/opencv-3.4.6/3rdparty/zlib/") 

  注意修改上面路径。清除cmake,然后重新cmake & make。
  可能还有其他类似以上报错,处理方式一样。


报错集锦五佳球 第四位

  undefined reference to `gzeof’

  undefined reference to `_dl_hwcap’

  undefined reference to `_dlopen’ 等

​ 【解决方法

  CMakeCache.txt 中找到:添加 -lpthread -lrt -lz -ldl,意思是编译的时候把这些库链接进来:

CMAKE_EXE_LINKER_FLAGS:STRING=-lpthread -lrt -lz -ldl

报错集锦五佳球 第三位

  undefined reference to `inflateValidate’

解决方法

  在交叉编译opencv前,需要交叉编译ARM32位的 zlib 和 libpng,方法看下面。

  编译器是arm-himix200-linux-gcc,编译libpng前,需要先编译zlib库。

  zlib库下载地址http://www.zlib.net/。

  下载zlib-1.2.11.tar.gz,解压后,得到zlib-1.2.11。

cd zlib-1.2.11 
export CC=arm-himix200-linux-gcc  //它的configure不支持用CC变量来指定交叉工具链 

./configure --prefix=/opt/hisi-linux/x86-arm/arm-himix200-linux/zlib 
sudo make 
sudo make install

  之后下载libpng源码,地址:https://sourceforge.net/projects/libpng/files/libpng16/1.6.36/

  下载libpng-1.6.36.tar.gz,解压后,得到libpng-1.6.36。

cd libpng-1.6.36 

./configure CC=arm-himix200-linux-gcc --host=arm-himix200-linux CFLAGS=-I/opt/hisi-linux/x86-arm/arm-himix200-linux/zlib/include LDFLAGS=-L/opt/hisi-linux/x86-arm/arm-himix200-linux/zlib/lib --prefix=/opt/hisi-linux/x86-arm/arm-himix200-linux/libpng

  此时还需要修改Makefile,把zlib的路径加进去:

vi Makefile

  在DEFAULT_INCLUDES = -I.下面再加一句:

DEFAULT_INCLUDES += -I/opt/hisi-linux/x86-arm/arm-himix200-linux/zlib/include
sudo make 
sudo make install

  之后到安装目录,就可以看到编译出来文件。

  然后把刚才生成的两个库的lib 都拷贝到 /opt/hisi-linux/x86-arm/arm-himix200-linux/arm-linux-gnueabi/lib。

  收工~


  至于报错集锦五佳球 第二位和第一位,如果你们遇到了请告诉我。


扫描下方二维码即可关注我的微信公众号【极智视界】,获取更多实践项目资源和读书分享,让我们用极致+极客的心态来迎接AI !
在这里插入图片描述

以上是关于经验分享华为海思Hi35xx系列ARM32交叉编译opencv的主要内容,如果未能解决你的问题,请参考以下文章

FFmpeg开发笔记:ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台

FFmpeg开发笔记:ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台

OpenCV开发笔记(七十四):OpenCV3.4.1+ffmpeg3.4.8交叉编译移植到海思平台Hi35xx平台

海康摄像头 海思AI芯片(Hi35XX): 图像jpg转.bgr

[转帖]华为海思Hi1620芯片发布在即 7nm制程ARM架构最高可达3.0GHz

海思Hi35xx uboot启动分析总结