经验分享华为海思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