海思交叉编译opencv4(以opencv400为例)

海思交叉编译器的安装

解压aarch64-himix100-linux.tgz,然后使用sudo权限运行gcc-arm-none-eabi-4_9-2015q3.install

正常情况下应无报错信息。

opencv的编译

  • 下载opencv4.0.0和opencv_contrib,将其分别解压。

  • 对于opencv4.0.0,修改最顶层的CMakeList.txt,找到ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR}),并在下面添加:

ocv_include_directories(./3rdparty/zlib)

用以解决fatal error: zlib.h: No such file or directory #include “zlib.h”:

  • 修改opencv4.0.0/3rdparty/libpng/CMakeLists.txt,在最前面添加
IF(HISI3559A)
	SET(ARM 1)
	SET(ENABLE_NEON 1)
ENDIF()

用以解决libopencv_imgcodecs.so.4.1.0: undefined reference to png_init_filter_functions_neon

或者也可以修改opencv4.0.0/3rdparty/libpng/pngpriv.h

if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \

注释,即改为

 /*#  if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \*/

并在其下面添加一行

 #   if defined(PNG_ARM_NEON) && (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \

两种方案均可。

新建build.sh,里面存放着cmake的命令

cmake \
    -DCMAKE_BUILD_TYPE=RELEASE \
    -DCMAKE_C_COMPILER=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-gcc \
    -DCMAKE_CXX_COMPILER=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-g++ \
    -DBUILD_SHARED_LIBS=ON \
    -DCMAKE_CXX_FLAGS=-fPIC \
    -DCMAKE_C_FLAGS=-fPIC \
    -DCMAKE_EXE_LINKER_FLAGS=-lpthread -lrt -ldl \
    -DENABLE_PIC=ON \
    -DHISI3559A=1 \
    -DCMAKE_INSTALL_PREFIX=../../opencv4/ \
    -DWITH_IPP=OFF \
    -DWITH_ITT=OFF \
    -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.0.0/modules \
    ..

这里需要特别注意-DWITH_ITT=OFF,要不然会找不到TBB定义。至于IPP因为是intel的,保险起见关掉了。

cmake过程中,可能会出现一些需要下载而且特别慢的地方。例如ippicv,这些需要进入相应的module下,修改cmake或者makefile,将url改为file:/path/to/the/file。

然后执行命令:

mkdir build
cd build
cp ../build.sh .
./builld.sh
make -j8
make install

涉及的文件可以从我的百度网盘下载:
链接:https://pan.baidu.com/s/10Y_RxSr7dt6_jpVpzw_zfA
提取码:qxx1

参考资料:

undefined reference to `png_init_filter_functions_neon’_weixin_42330265的博客-CSDN博客

海思3559A上编译OpenCV4.1.0源码操作步骤_网络资源是无限的-CSDN博客

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐