【经验分享】华为海思Hi35xx系列ARM32交叉编译opencv 您所在的位置:网站首页 交叉编译opencv 【经验分享】华为海思Hi35xx系列ARM32交叉编译opencv

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

2023-03-15 18:25| 来源: 网络整理| 查看: 265

  本教程详细记录了华为海思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/。

  用到的海思编译工具链包如下(搞不到资源的可以联系我):【经验分享】华为海思Hi35xx系列ARM32交叉编译opencv_opencv

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_ubuntu_02



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有